【发布时间】:2019-05-07 06:09:40
【问题描述】:
是否存在语法糖来调用具有多个 Option 类型的参数但没有 None 的默认值的函数?
def func1(param1: Option[String],
param2: Option[String]): String =
param1.getOrElse(param2.getOrElse("none"))
func1(None, None) // "none"
func1(Some("value1"), None) // "value1"
func1(Some("value1"), Some("value2")) // "value1"
func1(None, Some("value2")) // "value2"
我想通过在调用func1() 时只给一个参数而不给任何其他参数None 来实现"value2" 的返回值。
func1(param2=Some("value2")) // not enough arguments for method
// func1: (param1: Option[String], param2: Option[String])String.
// Unspecified value parameter param1.
我无法修改原始功能。我可以用另一个函数包装它,但首先要寻找已经可用的语法糖。
【问题讨论】:
-
给他们两个默认参数?你也可以
param1.orElse(param2).getOrElse("none") -
稍微扩展一下erip的评论:为什么不把
func1声明为def func1(param1: Option[String] = None, param2: Option[String] = None): String? -
如前所述,我无法修改原始函数(它来自我正在使用的库,此时不想分叉任何东西)。我可以用另一个函数包装它,但首先要寻找已经可用的语法糖。
-
你必须把它包起来。如果你可以修改库代码,那会很危险,对吧?
标签: scala syntactic-sugar scala-option