我是否理解这一点
def 每次访问时都会进行评估
lazy val 一旦被访问就被评估
val 进入执行范围后进行评估?
我在JAXMag的Scala特殊问题中遇到了以下代码:
package com.weiglewilczek.gameoflife
case class Cell(x: Int, y: Int) {
override def toString = position
private lazy val position = "(%s, %s)".format(x, y)
}
Run Code Online (Sandbox Code Playgroud)
lazy val上述代码中的使用是否比下面的代码提供了更多的性能?
package com.weiglewilczek.gameoflife
case class Cell(x: Int, y: Int) {
override def toString = "(%s, %s)".format(x, y)
}
Run Code Online (Sandbox Code Playgroud)
或者只是一个不必要的优化案例?
我有一个场景,我有一些对象需要互相参考.我可以编译的唯一方法是使用lazy
class A(b:B)
class B(a:A)
lazy val a:A = new A(b)
lazy val b:B = new B(a)
Run Code Online (Sandbox Code Playgroud)
我可以使用一些演员做同样的事情,并让它也编译
abstract class Message
case class Message1 extends Message
case class Message2 extends Message
class Actor1(otherActor:Actor) extends Actor {
def act() {
loop {
react {
case Message1 =>
println("received message1")
otherActor ! Message2
case _ =>
}
}
}
}
class Actor2(otherActor:Actor) extends Actor {
def act() {
loop {
react {
case Message2 =>
println("received message2")
otherActor ! Message1
case …Run Code Online (Sandbox Code Playgroud)