加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

将消息发送到Scala中的函数

发布时间:2020-12-16 09:57:15 所属栏目:安全 来源:网络整理
导读:我正在通过Bruce Tate的 Seven Languages in Seven Weeks 工作,我很难理解他的sizer.scala(Scala:第3天)的实现.特别是,请考虑以下Singleton对象 object PageLoader { def getPageSize(url : String) = Source.fromURL(url).mkString.length} 以及使用actor
我正在通过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确实引用了getPageSizeConcurrent,这在Scala世界中被认为是非常标准的吗?为什么要将消息发送到函数而不是对象,反之亦然?

更新:有问题的代码只使用self一次,但它确实从以下import语句开始.

import scala.io._
import scala.actors._
import Actor._

看看the Scala API,看起来是the Actor singleton object has a self method.尽管这是自我分配给调用者的,但我不明白为什么接收块会被执行.

解决方法

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可以将消息发送回您所在的线程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读