我有一个类,我喜欢通过读取一个configfile来初始化我的var,它生成中间对象/ val,我想在一个方法中对它进行分组和隐藏.这是问题的最小部分 - 我用一个参数调用ctor,实际上是一个要解析的文件,而init-method生成String,实际上比这里更复杂,创建了很多中间对象:
class Foo (val i: Int) {
var s : String;
def init () {
s = "" + i
}
init ()
}
Run Code Online (Sandbox Code Playgroud)
这将产生错误:class Foo needs to be abstract, since variable s is not defined.在这个例子中,通过将String设置为""来很容易解决var s = "";,但实际上对象比String更复杂,没有适当的Null实现.
我知道,我可以使用一个Option,它也适用于比String更复杂的东西:
var s : Option [String] = None
def init () {
s = Some ("" + i)
}
Run Code Online (Sandbox Code Playgroud)
或者我可以省去我的方法电话.使用一个选项将迫使我一遍又一遍地写一些,没有太大的好处,因为没有必要除了以我认为可能的方式初始化它.
还有另一种方法来实现我的目标吗?
sep*_*p2k 17
var s : Whatever = _ 将s初始化为Whatever的默认值(引用类型为null,数字为0,bools为false等)
mis*_*tor 17
您应该使用以下方式执行初始化,而不是创建单独的初始化方法:
class Foo(val i: Int) {
var s: String = {
var s0 = " "
s0 += i
// do some more stuff with s0
s0
}
var dashedDate = {
val dashed = new SimpleDateFormat("yy-MM-dd")
dashed.format(updated)
}
// Initializing more than one field:
var (x, y, z) = {
var x0, y0, z0 = 0
// some calculations
(x0, y0, z0)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10124 次 |
| 最近记录: |