将Some中的值传递给具有默认参数值的函数的最佳方法是什么?

时间:2017-07-05 08:35:09

标签: scala

我有来自第三方库的功能,如下所示:

def myfunction(input:String = "some constant value")

我有一个

myinput:Option[String] 

和我一起,我需要传递这个功能。现在我这样做:

myfunction(myinput.getOrElse("some constant value"))

但我不想查看第三方库的默认值。 这样做的理想方式是什么?

5 个答案:

答案 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 _)