有,
def test(args: Any*) = args.size
我想根据条件使用空参数列表来调用它,但是要避免if / else。
我已经提出了这个解决方案:
test(List("one").filter( _ => condition) : _*)
还有比这更好的方法吗?
有关更多上下文,我正在使用Play 2.0 scala,并且有:
user => Redirect(routes.Application.index).withSession("username" -> user._1).withCookies(
List(Cookie("rememberme", Crypto.sign(user._1) + "-" + user._1)).filter(_ => user._3) : _*)
其中user._3
是rembemberme boolean。
我不想调用withSession或者用空参数列表调用它(不是实例化Cookie)如果rememberme是假的,那就是scala方式。
谢谢。
答案 0 :(得分:7)
我认为在这种情况下,嵌入if
/ else
是最干净的解决方案:
test((if (condition) Seq("one") else Seq.empty) : _*)
答案 1 :(得分:3)
虽然使用列表过滤器肯定有效,但这里似乎不合适,因为您需要整个列表或空列表,并且不需要迭代列表成员。
如果你真的想避免使用if / else,你可以将列表包装在Option[List[Any]]
中并使用Option的filter
和getOrElse
方法
test(Some(List("one")).filter{_ => condition}.getOrElse(Nil): _*)
您也可以使用match
,在这种情况下等同于if / else
test((condition match {case true => List("one"); case _ => Nil}) : _*)