gpt4 book ai didi

scala - 如何从子类型中的特征初始化值?

转载 作者:行者123 更新时间:2023-12-04 09:06:44 26 4
gpt4 key购买 nike

如果我写:

trait T {
val t = 3
val u = 1::t::Nil
}

class U extends T {
override val t = 2
}

(new U).u

它显示了这一点。
List(1, 0)

我应该如何更改上面的代码以使其显示以下内容:
List(1, 2)

override val t设置 t 的值为 u在性状 T ?

最佳答案

一种方法是延迟对 u 的评估。通过使用 deflazy val如下:

trait T {
def t = 3
def u = 1::t::Nil
}

class U extends T {
override def t = 2
}

(new U).u

或者
trait T {
val t = 3
lazy val u = 1::t::Nil
}

class U extends T {
override val t = 2
}

(new U).u

区别如下:
  • val在初始化期间对表达式求值
  • def每次都对表达式求值 u使用
  • lazy val使其在第一个 u 上进行评估使用和缓存结果
  • 关于scala - 如何从子类型中的特征初始化值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15762650/

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