我只是在 Internet 上浏览一些 Scala 教程,并注意到在一些示例中,在示例开头声明了一个对象。
Scalaclass和有什么区别?object
class
object
class C
object O
O
object O extends T
trait T
T
object C
C
另请参阅对象和类的 Scala 文档。
大多数情况下,您需要object保存可用的方法和值/变量,而无需先实例化某个类的实例。static这种用法与Java中的成员密切相关。
static
object A { def twice(i: Int): Int = 2*i }
然后,您可以使用调用上述方法A.twice(2)。
A.twice(2)
如果twice是某个类的成员A,那么您需要先创建一个实例:
twice
A
class A() { def twice(i: Int): Int = 2 * i } val a = new A() a.twice(2)
您可以看到这是多么多余,因为twice不需要任何特定于实例的数据。
您还可以将其object本身用作类或特征的一些特殊实例。当你这样做时,你的对象需要扩展一些trait才能成为它的子类的一个实例。
trait
考虑以下代码:
object A extends B with C { ... }
该声明首先声明了一个匿名(不可访问)类,它扩展了B和C,并实例化了这个名为 的类的单个实例A。
B
这意味着A可以传递给期望类型为BorC或的对象的函数B with C。
B with C
Scala 中还存在一些对象的特殊功能。我建议阅读官方文档。
def apply(...)
A(...)
def unapply(...)