我有一个变量param
,必须在运行时初始化。
然后,我有一部分代码实现了以下内容:
if (param has been initialized)
...do something...
else
print error and exit
在Scala中执行此操作最常用的方法是什么?
到目前为止,我已经以这种方式使用Option[X]
:
var param : Option[TheType] = None
...
val param_value : TheType = x getOrElse {println("Error"); null}
但是,因为我必须返回null
,所以看起来很脏。
我该怎么做?
答案 0 :(得分:4)
只需map
或foreach
就可以了:
param.foreach { param_value =>
// Do everything you need to do with `param_value` here
} getOrElse sys.exit(3) # Param was empty, kill the program
您还可以使用for
理解方式:
for {
param_value <- param
} yield yourOperation(param_value)
这样做的好处是,如果您的调用代码期望使用param_value
作为yourMethod
的返回值执行某些操作,则您将编码param_value
在您的回复中不存在的可能性类型(它将是Option[TheType]
而不是潜在的null
TheType
。)
答案 1 :(得分:2)
我可能错了,但在我看来,Future的使用符合您的问题:如果没有明确检查您所需的param_value
是否已初始化并完成该程序,则不是可以使资源相关的代码在资源被正确初始化时执行:
val param: Future[TheType] = future {
INITIALIZATION CODE HERE
}
param onFailure {
case e => println("Error!");
}
param onSuccess {
case param_value: TheType => {
YOUR BUSINESS CODE HERE
}
}