相关疑难解决方法(0)

Scala中的`def` vs`val` vs`lazy val`评估

我是否理解这一点

  • def 每次访问时都会进行评估

  • lazy val 一旦被访问就被评估

  • val 进入执行范围后进行评估?

scala properties lazy-evaluation

64
推荐指数
6
解决办法
2万
查看次数

使用lazy 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)

或者只是一个不必要的优化案例?

scala lazy-evaluation micro-optimization

7
推荐指数
3
解决办法
1604
查看次数

斯卡拉懒惰的问题

我有一个场景,我有一些对象需要互相参考.我可以编译的唯一方法是使用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)

scala reference lazy-evaluation forward actor

1
推荐指数
1
解决办法
913
查看次数