2015-12-22 114 views
2

我试图实现部分17.9斯卡拉的工人通过示例书与斯卡拉版本2.11.7。 import语句:斯卡拉通过示例:斯卡拉spawn函数2.11.7

import scala.concurrent._, scala.concurrent.ops._ 

是错误 “OPS不就是scala.concurrent的成员”。我做了谷歌和知道concurrent.ops已被弃用,而是通过未来,改变import语句:

import scala.concurrent._, scala.concurrent.Future._ 

全班来源:符合

import scala.concurrent._ 
import scala.concurrent.Future._ 

class ComputeServer(n: Int) { 

    private abstract class Job { 
    type T 
    def task: T 
    def res(x: T) 
    } 

    private val openJobs = new Channel[Job]() 

    private def processor(i: Int) { 
    while(true) { 
     val job = openJobs.read 
     job.res(job.task) 
    } 
    } 

    def future[A](p: => A):() => A = { 
    val reply = new SyncVar[A]() 
    openJobs.write{ 
     new Job{ 
     type T = A 
     def task = p 
     def res(x: A) = reply.put(x) 
     } 
    } 
    () => reply.get 
    } 

    spawn(replicate(0, n){processor}) 
} 

但出现错误:spawn(replicate(0, n){processor})

not found: value spawn 
not found: value replicate 
missing arguments for method processor in class ComputeServer; follow this method with `_' if you want to treat it as a partially applied function 

版本2.11.7中的生成,复制,处理函数是什么?

+1

菌种用于创建与内部给出的代码的线程。你可以使用Future {.... // code}。我不知道复制品,但您可以在这里找到来源http://lampsvn.epfl.ch/trac/scala/browser/scala/tags/R_2_7_2_final/src/library/scala/concurrent/ops.scala?view=markup这个api在这里真的很老 –

+0

我发现复制功能属于你的url中的ops对象。 – code4f

+0

当然你发现它,这就是为什么我给你的网址...但它是过时的来源 –

回答

1

一个可以这样创建方法菌种:

def spawn(p: => Unit) { 
    val t = new Thread() { override def run() = p } 
    t.start() 
}