用于检查参数初始化的惯用方法

时间:2015-03-15 18:13:42

标签: scala idioms

我有一个变量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,所以看起来很脏。

我该怎么做?

2 个答案:

答案 0 :(得分:4)

只需mapforeach就可以了:

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
    }
}