5

拥有,

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._3rememberme 布尔值在哪里。

如果rememberme 为false,我不想以scala 方式调用withSession 或用空参数列表调用它(不实例化Cookie)。

谢谢你。

4

2 回答 2

7

我认为在这种情况下嵌入if/else是最干净的解决方案:

test((if (condition) Seq("one") else Seq.empty) : _*)
于 2011-12-17T18:10:05.790 回答
3

虽然使用列表过滤器确实有效,但在这里似乎不合适,因为您想要整个列表或空列表,并且不需要遍历列表成员。

如果您真的想避免 if/else,您可以将列表包装在 an 中Option[List[Any]]并使用选项filtergetOrElse方法

test(Some(List("one")).filter{_ => condition}.getOrElse(Nil): _*)

您也可以使用match,在这种情况下相当于 if/else

test((condition match {case true => List("one"); case _ => Nil}) : _*)
于 2011-12-17T17:03:57.083 回答