gpt4 book ai didi

scala - val和scala类内的对象?

转载 作者:行者123 更新时间:2023-12-03 08:53:24 28 4
gpt4 key购买 nike

在scala类中将字段声明为vallazy valobject有什么区别,如以下代码片段所示:

class A

class B {
val a1 = new A { def foo = 1 }
object a2 extends A { def foo = 1 }
lazy val a3 = new A { def foo = 1 }
}

最佳答案

在前者中,创建类B时将立即执行包含的所有代码。但是,在后者中,除非您实际使用该对象,否则不会实例化该对象。

您可以在这里看到区别:

class A { println("Creating a new A") }
class B {
val a1 = new A { println("a1"); def foo = 1 }
object a2 extends A { println("a2"); def foo = 1 }
}

scala> val b = new B
Creating a new A
a1
b: B = B@1176e8a

scala> b.a2.foo
Creating a new A
a2
res0: Int = 1

在创建的.class文件的命名等方面也存在隐藏的差异。当然,两者有不同的类型。

关于scala - val和scala类内的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3448691/

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