inline fun <T, R> T.let(block: (T) -> R): R = block(this)
inline fun <T, R> T.run(block: T.() -> R): R = block()
inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this }
inline fun <T> T.also(block: (T) -> Unit): T { block(this); return this }
리턴값이 리시버인가? block의 리턴값인가?
리시버가 block의 리시버가 되는가? apply run 파라메터가 되는가? also let