【问题标题】:Idiomatic way to check for parameter initialization检查参数初始化的惯用方法
【发布时间】:2015-05-17 19:56:28
【问题描述】:

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

我该怎么做?

【问题讨论】:

标签: scala idioms


【解决方案1】:

我可能错了,但在我看来,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
    }
}

【讨论】:

    【解决方案2】:

    只需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。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-29
      相关资源
      最近更新 更多