我有来自第三方库的功能,如下所示:
def myfunction(input:String = "some constant value")
我有一个
myinput:Option[String]
和我一起,我需要传递这个功能。现在我这样做:
myfunction(myinput.getOrElse("some constant value"))
但我不想查看第三方库的默认值。 这样做的理想方式是什么?
答案 0 :(得分:2)
您可以尝试:
myinput.map(v => myfunction(v)).getOrElse(myfunction())
或更简洁(正如Pablo在评论中所建议的那样):
myinput.map(myfunction).getOrElse(myfunction())
答案 1 :(得分:1)
有很多方法可以实现这一点,但我最喜欢的方法是使用模式匹配。这段代码也很易读。
myinput match {
case Some(str) => myfunction(str)
case _ => myfunction()
}
答案 2 :(得分:0)
我不知道这是不是最好的方法,但你可以这样做:
if (myinput.isDefined){
myfunction(myinput.get)
}
else{
myfunction()
}
因此,如果您的myinput
包含值,请使用它,否则请使用默认值。
显然,如果你经常这样做,你应该把它外包给一个函数,在每次调用时都只有一行。
答案 3 :(得分:0)
另一种方式是折叠。 假设myfunction返回String,我们得到:
val callIt: Option[String] => String = it => it.fold(myfunction())(myfunction(_))
callIt(None)
callIt(Some("abc"))
答案 4 :(得分:0)
这种事情通常由.fold
完成:
myInput.fold(myfunction())(myfunction _)