gpt4 book ai didi

scala - 将消息发送到Scala中的函数

转载 作者:行者123 更新时间:2023-12-04 18:14:20 26 4
gpt4 key购买 nike

我正在研究Bruce Tate的Seven Languages in Seven Weeks,并且很难理解他对sizer.scala的实现(Scala:第3天)。特别是,请考虑以下Singleton对象

object PageLoader {
def getPageSize(url : String) = Source.fromURL(url).mkString.length
}

以及使用actor来计算 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)
}
}
}
  • 自我是指什么? getPageSizeConcurrently self 是否可以引用函数?
  • 假设自我确实引用了getPageSizeConcurrently,这在Scala世界中是否被认为是相当标准的?为什么要向功能而不是对象发送消息,反之亦然?

  • 更新:有问题的代码仅使用 self 一次,但它确实从以下 import语句开始。
    import scala.io._
    import scala.actors._
    import Actor._

    通过 the Scala API来看,似乎是 the Actor singleton object has a self method。即使是分配给 selfcaller,我也看不到为什么会执行 receive块。

    最佳答案

    Actor随播对象上有一个self方法。从scaladoc:

    Returns the currently executing actor. Should be used instead of this in all blocks of code executed by actors.



    我猜测您的代码已导入Actor对象,并且它是您的代码正在调用的Actor对象的self方法。这样,您就可以引用所处的主actor线程,并且开始获取页面大小的匿名actor可以将消息发送回所处的线程。

    关于scala - 将消息发送到Scala中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6743169/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com