如何处理Some [String]参数?

时间:2018-10-15 10:28:59

标签: scala

我有以下代码,但我想使其在习惯上更正确。首先,我将三个变量定义为Option[String]

var p1 = None : Option[String]
var p2 = None : Option[String]
var p3 = None : Option[String]

然后,我使用函数getParameters()定义这些参数。基本上,此功能仅从文本文件中读取参数。

getParameters()
//...

def getParameters(): Unit = {
    val p1 = Some(getP1())
    val p2 = Some(getP2())
    val p3 = Some(getP3())
}

最后,在getParameters()之后,我运行了另一个函数getRules,该函数使用p1p2p3。现在它期望它们是String而不是Some[String]

val df = getRules(p1,p2,p3)

如果这三个参数中的任何一个为None,则程序应引发错误。我想知道我是否走对了。参数的个数越大,例如10或15?处理这些参数的最佳捷径是什么?

2 个答案:

答案 0 :(得分:3)

val valuesOpt = for(a <- p1; b <- p2; c <- p3) yield (a,b,c)

valuesOpt.map{
  case (a, b, c) => getRules(a, b, c)
}.getOrElse(throw new Exception("Nope"))

答案 1 :(得分:2)

有多种方法可以拆开选件的包装,但就您而言,我认为这是最容易阅读/维护的包装:

a=int(input())

b=str(a)

c=int(b[0])*3

print(c)

*编辑:这是一个小的scala小提琴,以演示如何使用它:https://scalafiddle.io/sf/YVCYBBl/1