默认情况下为可变参数空白的情况
假设您希望在使用可变参数调用方法时使用模式匹配,如下所示:
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
那么通过可变参数根本没有意义。