Scala中没有示例构造函数的示例变量?

rekjcdws  于 5个月前  发布在  Scala
关注(0)|答案(1)|浏览(98)

我有点困惑this code

class EdgeTriplet[VD, ED] extends Edge[ED] {
  
  var srcAttr: VD = _ // nullValue[VD]

  var dstAttr: VD = _ // nullValue[VD]

字符串
它有两个变量(srcAttr, dstAttr
我的第一个疑问是,这些是示例变量还是别的什么?
如果它们是示例变量,那么它的构造函数在哪里可以初始化这些变量?
请分享以了解这一点
谢谢

fivyi3re

fivyi3re1#

这是Scala的 default initializer 语法。如果一个示例变量是用特殊的下划线_常量初始化的,那么如果你没有在Java中定义任何构造函数,它会将该字段转换为默认值,所以JVM上的引用类型变成null,值类型变成它们的默认值(00.0'\0'false等)
比如说,

case class SomeClass()

class Example {
  val someInt: Int = _ // Becomes 0
  val someLong: Long = _ // Becomes 0L
  val someBool: Boolean = _ // Becomes false
  val someDouble: Double = _ // Becomes 0.0
  val someString: String = _ // Becomes null
  val someClassInstance: SomeClass = _ // Becomes null
}

字符串
假设VD是一个类,而不仅仅是一些原始类型的类型别名,它等价于null。老实说,我像瘟疫一样避免这种语法;它很奇怪,不直观,大多数人必须查找它的意思。
你可以在Scala on this related question中看到下划线的 * 所有 * 不同用法。这包括 default initializer 语法以及下划线在语言中的所有其他含义。

相关问题