在scala中分配给None或null或_的类成员哪个更好,为什么?

rjc*_*rjc 4 scala

我有一个Scala域类(用于持久化到数据库),如:

class Foo() {

var bar: Long = _ // or None or null ???
var jaz: String = _ // or None or null or empty string "" ???
}
Run Code Online (Sandbox Code Playgroud)

如果字段bar和jaz是必填字段而不是可选字段,如何影响答案?

Kim*_*bel 6

使用Option使类的用户清楚该值是可选的.在Scala中不鼓励使用null,并且会让其他开发人员感到惊讶.它也没有"出现"在类型中.如果该字段不是可选字段,则不要使用Option和创建字段构造函数参数.不要提供在创建后将对象置于无效状态的构造函数.


Lui*_*hys 5

来自Scala编程:

字段的初始化程序"= _"为该字段分配零值.零值取决于字段的类型.数字类型为0,布尔值为false,引用类型为null.这与在没有初始化程序的Java中定义相同变量的情况相同.请注意,您不能简单地在Scala中省略"= _"初始化程序... [因为它]将声明一个抽象变量,而不是未初始化的变量

所以你上面的代码是一样的

class Foo() {

var bar: Long = 0
var jaz: String = null
}
Run Code Online (Sandbox Code Playgroud)

Kim的回答听起来是正确的 - 如果一个字段是可选的,那么把它变成一个Option,如果没有,让构造函数设置它.