以前のリビジョンの文書です
レシーバーに対して一連の関数を呼びだすことでレシーバーに対する設定ができる。
// 定義 public inline fun <T> T.apply(block: T.() -> Unit): T { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } block() return this }
// サンプル val file= File("text.txt").apply { setReadable(true) setWritable(true) setExecutable(true) }
渡されたラムダにitで参照できるようにする。
// 定義 public inline fun <T, R> T.let(block: (T) -> R): R { contract { callsInPlace(block, InvocationKind.EXACTLY_ONCE) } return block(this) }
// サンプル val value = listOf<Int>(1,2,3).shuffled().first().let { it*it } println(value) // null合体演算子との組み合わせ
関数 | 渡し | 関数コール | 返し |
---|---|---|---|
apply | 何も渡さない | 相対スコープ | レシーバー |
let | レシーバーをラムダに渡す | ー | ラムダの最後の行 |