用于必需Option类型功能参数的Scala语法糖

时间:2018-12-05 16:04:48

标签: scala syntactic-sugar scala-option

是否存在语法糖来调用具有多个Top类型的参数但没有任何默认值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" 时只给出一个参数,而不给其他任何"value2"来获得func1()的返回值。

None

我无法修改原始功能。我可以用其他功能包装它,但是首先要寻找已经可用的合成糖。

1 个答案:

答案 0 :(得分:0)

只要您不能更改功能,那是不可能的。
但是,由于我们在scala中,因此您可以通过隐式转换添加一个适合您需求的方法。

让我们说这个类是在您的库中定义的:

class Foo {
  def func1(param1: Option[String], param2: Option[String]): String =
    param1 orElse param2 getOrElse "none"
}

您可以创建一个隐式类,以使用正确的签名添加您自己的函数。

implicit class FooOps(foo: Foo) {
  def func1(param1: Option[String] = None, param2: Option[String] = None): String =
    foo.func1(param1, param2)
}

现在可以根据需要调用该方法

scala> new Foo().func1()
res1: String = none