默认情况下为可变参数空白的情况

假设您希望在使用可变参数调用方法时使用模式匹配,如下所示:

def foo(bar: Int*) = ???

val x = false
foo(x match {
  case true => 1
  case _ =>
})

运行上面的代码会导致类型不匹配错误,因为foo需要Int类型的参数,但在默认情况下找到Unit 。 另一方面,删除默认情况会导致警告,表明该匹配可能不完全,并且正确如此。

我的问题是,我如何提供一个空的默认情况下匹配(这将导致调用foo()没有任何参数)?


您可以在一个序列中捕获匹配结果,并将参数缺乏为空。 然后将结果绘制到参数中:

val x = true
foo((x match {
  case true => Seq(1)
  case _ => Seq.empty
}):_*)

一种选择是使用Option[Int]而不是Int

def foo(bar: Option[Int]*) = ???

val x = false
foo(x match {
  case true => Some(1)
  case _ => None
})

我认为if-else表达式在这里不那么冗长:

foo(if (x) Some(1) else None)

我认为,如果你匹配一个Boolean那么通过可变参数根本没有意义。

链接地址: http://www.djcxy.com/p/78955.html

上一篇: Default empty case for varargs

下一篇: Magnet pattern and overloaded methods