2016-10-21 12 views
7

として我々はKotlinと文表現

val obj = Obj() 
with (obj) { 
    objMethod1() 
    objMethod2() 
} 

を行うことができます。しかし、これを行う方法はありますか?あなたがオブジェクトを作成し、その状態を初期化するために、その上にいくつかのメソッドを呼び出す一般的なケースを解決するために

val obj = with(Obj()) { 
    objMethod1() 
    objMethod2() 
} 

+2

AFAIR、あなたは 'ヴァルを使用することができますobj = Obj()。apply {...} ' –

答えて

19

確かに、あなたは

は、その受信機としてthis値で指定された関数ブロックを呼び出し、this値を返します.apply { } STDLIB機能を、使用することができます。あなたは他の多くのKotlinのイディオムhere in the referenceの間でそれを見つけることができ

public inline fun <T> T.apply(block: T.() -> Unit): T { block(); return this } 

使用例。

4

あなたの2番目の例では、あまりにも動作します - ちょうどラムダが正しい値を返すことを確認してください(最後の式の結果はwith式の返される値です):

val obj = with(Obj()) { 
    objMethod1() 
    objMethod2() 
    this // return 'this' because we want to assign the new instance to obj 
}