debugging – 无法解释在scala shell中执行的示例的行为
发布时间:2020-12-16 09:52:38 所属栏目:安全 来源:网络整理
导读:L.S. 我只是使用Odersky等人的“Scala编程”来学习Scala. 在关于演员的章节中,我遇到了无法解释的行为.更具体地说,当尝试向’self’发送消息时(另请参阅example) 进入Scala shell: scala import scala.actors.Actor._ import scala.actors.Actor._scala sel
L.S.
我只是使用Odersky等人的“Scala编程”来学习Scala. 在关于演员的章节中,我遇到了无法解释的行为.更具体地说,当尝试向’self’发送消息时(另请参阅example) 进入Scala shell: scala> import scala.actors.Actor._ import scala.actors.Actor._ scala > self ! "Hello" scala > self.receive { case x => x } 但最后一行没有“回归”预期答案: resX:Any = hello 需要执行Ctrl-C以使shell返回接受我的输入并返回以下消息: Execution interrupted by signal. scala> self.receive {case x => x} // She's gone rogue,captain! Have to take her out! // Calling Thread.stop on runaway Thread[Thread-54,5,main] with offending code: // scala> self.receive {case x => x} 但以下实际上有效: self ! "Hello" ; self.receive { case x => x } 我的问题是: 发生了什么?为什么第一个例子不起作用,第二个例子不起作用?!? 解决方法
在写这本书的时候,只有一种演员:基于线程的演员.因此,如果self从同一个线程调用不同的对象,则返回相同的Actor.自从Scala 2.8(我认为)这个不再成立.
shell的工作方式是为每个发送的输入创建匿名类,所以在第一种情况下你有 object $1 { self ! "Hello" } object $2 { self.receive { case x => x } } 和$1.self不同于$2.self,而在第二种情况下你有 object $3 { self ! "Hello" ; self.receive { case x => x } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- angularjs – TypeError:无法使用Angular读取undefined的属
- angularjs – 在页面加载后滚动到锚点
- Bootstrap Tooltip显示换行和左对齐
- 如何在PyCharm运行配置中运行shell脚本而不是python?
- macos – 无法在OS X El Capitan中清除Bash终端历史记录
- Angular2:显示每个HTTP请求的活动指标,并隐藏视图直到完成
- postgresql – 如何创建docker-compose版本2以使用卷拥有持
- angularjs – ng-idle问题,如果在浏览器中打开了多个选项卡
- angular – 如何使用Querystring而不是’;’
- Bootstrap的js插件之按钮(button)