2017-02-06 5 views
1

私はFutureがどのように動作するのかを理解しようとしていて、そのapply()を見つけました。 APIはapply()apply()は同じオブジェクトを返します

について、これは、その意志を適用する非同期計算を開始し、より良い単純なオブジェクトを作成することにより、 と私はそれを理解したかった

その計算の結果をFutureオブジェクトを返すと言います変更されたフィールドを持つ同じオブジェクトを返します。 Stringを返して適用する今

object Rough extends App { 
    trait Sample 

    object Sample { 
    var x: Int = 0 
    def apply[T](body: => T): String= { 
     "Hello " + body 
    } 
    } 

    val s: String = Sample.apply("World") 

    print(s) 
} 

:たとえば、以下のコードを検討してください。私はそれがSample[Int]を返すようにします。具体的には、apply()Sample[Int]を返します。ここでInt値は、apply()に渡された文字列の長さになります。これどうやってするの?

答えて

1

関連性の低いScalaのトピックについては、混乱しているようです。

まずオフapply()は他の方法と同様です。呼び出されたときに名前を省略できる点が特別です。したがって、Sample()は、Sample.apply()の便利な省略形です。

これで、添付されているシングルトンオブジェクトを返すメソッドが必要な場合は、thisを返します。

object Sample { // create a singleton object 
    var x: Int = 0 
    def apply(s: String): Sample.type = { 
    x = s.length // save some data 
    this   // return a reference to this object 
    } 
} 

val samp = Sample("Hi there") // invoke the 'apply()' method 
samp.x   // get the saved data --> res0: Int = 8 
+2

そしてもう一つは、(または「'Sample'オブジェクト」)、それはFuture'オブジェクト'によって定義されたオブジェクト、つまり、「同じオブジェクト」を返すという意味ではありません「'Future'オブジェクトを返す」ということです将来の[A]を拡張するオブジェクトです。 –

関連する問題