2015年6月14日日曜日

scala関数型デザイン&プログラミング P143

リスト7-11
  def run[A](es: ExecutorService)(p: Par[A]): A = {
      val ref = new java.util.concurrent.atomic.AtomicReference[A]
      val latch = new CountDownLatch(1)
      p(es) { a => ref.set(a); latch.countDown }
      latch.await
      ref.get
    }

    p(es) { a => ref.set(a); latch.countDown } の意味がすぐにはわからなかった。
  trait Future[+A] {
    private[parallelism] def apply(k: A => Unit): Unit
  }
  type Par[+A] = ExecutorService => Future[A]
  を参照すると
  pがPar[A]で es=>Futre[A]なので p(es)はFuture[A]を表す。
 Future[A]のapplyはA=>Unitを引数としているので、 { a => ref.set(a); latch.countDown } を適用しているようだ。

0 件のコメント:

コメントを投稿