5

たが、私は空の引数リストは、状況に応じてそれを呼び出すが、/それ以外の場合は避けたいのですがscalaに変数argを渡す方法は?

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

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

がこれよりも良い方法があります:

私は、このソリューションで出て来ていますか?

は、より多くの文脈では、私がプレイ2.0 Scalaので遊んで、これを持っている: user._3はrembembermeブールのある

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

remembermeがfalseの場合は、withSessionをコールしたり、空の引数リスト(Cookieをインスタンス化しない)でコールしないようにしたいと思います。

ありがとうございます。

答えて

7

私はif/elseを埋め込むこの場合だと思うきれいなソリューションです。

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

私はこれが最もきれいであることに同意し、私は本当になかった、ありがとう私はちょうどSeq.emptyまたはNilがないので、2番目の答えも便利です:) – avalez

+1

@alavezあなたの目的がListをインスタンス化するのを避けていれば、これは大きな失敗ですが、それはまさに 'Seq'のやり方だから!これを避けるには、withCookiesの前の部分を 'val t'に代入し、' if(user._3)t.withCookies(...)else t.withCookies() 'を呼び出します。一時変数は良いです! –

+0

ご意見ありがとうございます。 Nilを使用するとリストもインスタンス化されるのを避けることができますか?そしてちょうど良い理解のために、Seq.emptyは何とかNilよりも良くて悪いですか? – avalez

3

リストフィルタを使用している間は、リスト全体または空のリストのいずれかが必要であり、リストのメンバーを反復処理する必要がないので、ここでは不適切と思われます。

あなたは本当にあなたがこの場合にも同等ですmatchを、使用することができ

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

/他に、あなたはオプションのfiltergetOrElse方法をOption[List[Any]]でリストをラップして使用することができれば回避したい場合

もし/他

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

だから私はで終了しました: テスト((IF(条件)配列(「1」)他無記号):_ *) – avalez

関連する問題