Chr*_*ick 5 concurrency scala actor
我正在努力通过布鲁斯泰特七周的七种语言,并且很难理解他的实施sizer.scala(斯卡拉:第3天).特别是,请考虑以下Singleton对象
object PageLoader {
def getPageSize(url : String) = Source.fromURL(url).mkString.length
}
Run Code Online (Sandbox Code Playgroud)
以及使用actors计算urls数组给出的每个网页中的字符数的以下方法.
def getPageSizeConcurrently() = {
val caller = self
for(url <- urls) {
actor { caller ! (url, PageLoader.getPageSize(url)) }
}
for(i <- 1 to urls.size) {
receive {
case (url, size) =>
println("Size for " + url + ": " + size)
}
}
}
Run Code Online (Sandbox Code Playgroud)
getPageSizeConcurrently?是否有可能为自指功能?getPageSizeConcurrently,这在Scala世界中被认为是非常标准的吗?为什么要将消息发送到函数而不是对象,反之亦然?更新:有问题的代码只使用self一次,但它确实从以下import语句开始.
import scala.io._
import scala.actors._
import Actor._
Run Code Online (Sandbox Code Playgroud)
通过寻找Scala的API,似乎在Actor单对象有一个self方法.即使那是self分配的caller,但我不明白为什么receive要执行该块.