2

未来のスポーンから返されるオブジェクトにアクセスできるようにしたいと思います

import scala.actors.Future
import scala.actors.Futures._

class Object1(i:Int) {
    def getAValue(): Int = {i}
}

object Test {
    def main( args: Array[String] ) = {
        var tests = List[Future[Object1]]()
        for(i <- 0 until 10) {
            val test = future {
                val obj1 = new Object1(i)
                println("Processing " + i + "...")
                Thread.sleep(1000)
                println("Processed " + i)
                obj1
            }
            tests = tests ::: List(test)
        }
        val timeout = 1000 * 60 * 5  // wait up to 5 minutes
        val futureTests = awaitAll(timeout,tests: _*)

        futureTests.foreach(test => println("result: " + future()))
    }
}

このコードの1回の実行からの出力は次のとおりです。

Processing 0...
Processing 1...
Processing 2...
Processing 3...
Processed 0
Processing 4...
Processed 1
Processing 5...
Processed 2
Processing 6...
Processed 3
Processing 7...
Processed 4
Processing 8...
Processed 6
Processing 9...
Processed 5
Processed 7
Processed 8
Processed 9
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>
result: <function0>

future()。getClass()を試しましたが、出力は

result: class scala.actors.FutureActor

私がアクセスできるように探しているのは、obj1オブジェクトです。

ありがとう

ブルース

4

1 に答える 1

2

あなたはこのようなことをする必要があります。の戻りはawaitAllですList[Option[Any]]。それぞれの未来の結果はOption[Any]であるため、値を取得し、それをキャストして取得するには一致が必要です。getAValue

    futureTests.foreach(test => test match {
        case Some(r) => println("result: " + r.asInstanceOf[Object1].getAValue)
    })

@JamesIryへの帽子のヒント

于 2011-01-10T20:29:39.330 に答える