如何在scala中传递一个或不传递一个变量arg?

发布于 2024-12-21 14:46:25 字数 641 浏览 0 评论 0原文

有,

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 布尔值。

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

谢谢。

Having,

def test(args: Any*) = args.size

I'd like to call it with empty argument list depending on condition, but avoid if/else.

I've come out with this solution:

test(List("one").filter( _ => condition) : _*)

Is there better way than this?

For more context, I'm playing with Play 2.0 scala, and have this:

  user => Redirect(routes.Application.index).withSession("username" -> user._1).withCookies(
    List(Cookie("rememberme", Crypto.sign(user._1) + "-" + user._1)).filter(_ => user._3) : _*)

where user._3 is rembemberme boolean.

I'd like not to call withSession or call it with empty argument list (not to instantiate Cookie) if rememberme is false, in scala manner.

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悲喜皆因你 2024-12-28 14:46:26

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

test((if (condition) Seq("one") else Seq.empty) : _*)

I think in this case embedding an if/else is the cleanest solution:

test((if (condition) Seq("one") else Seq.empty) : _*)
伪装你 2024-12-28 14:46:26

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

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

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

您还可以使用 match,在本例中相当于 if/else

test((condition match {case true => List("one"); case _ => Nil}) : _*)

While Using list filter certainly works, it seems inappropriate here since you want either the entire list or an empty list and shouldn't need to iterate over the list members.

If you really want to avoid if/else, you could wrap the list in an Option[List[Any]] and use the Option's filter and getOrElse methods

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

You could also use match, which in this case is equivalent to if/else

test((condition match {case true => List("one"); case _ => Nil}) : _*)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文