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 语法以及下划线在语言中的所有其他含义。
1条答案
按热度按时间fivyi3re1#
这是Scala的 default initializer 语法。如果一个示例变量是用特殊的下划线
_
常量初始化的,那么如果你没有在Java中定义任何构造函数,它会将该字段转换为默认值,所以JVM上的引用类型变成null
,值类型变成它们的默认值(0
、0.0
、'\0'
、false
等)比如说,
字符串
假设
VD
是一个类,而不仅仅是一些原始类型的类型别名,它等价于null
。老实说,我像瘟疫一样避免这种语法;它很奇怪,不直观,大多数人必须查找它的意思。你可以在Scala on this related question中看到下划线的 * 所有 * 不同用法。这包括 default initializer 语法以及下划线在语言中的所有其他含义。