0

次のコードがあります。

private def formatQuery(q:String = ""):String = {
  val q2 = if (q=="") "*" else "'%s'".format(q)
  [...]

q2値の宣言を避けるための慣用的な方法があるかどうか知りたいだけです

みたいな

private def formatQuery(
  q:String = if (q=="") "*" else "'%s'".format(q)
):String = {
  [...]

これは明らかに機能しません

4

3 に答える 3

4

変数への割り当てを避けようとしている特別な理由はありますq2か?スタイル自体は素晴らしいようです。

あなたが提案したものは明らかに機能しませんが、ここに機能する2つの提案があります。

元の関数が次の場合:

private def formatQuery(q:String = ""):String = {
  val q2 = if (q=="") "*" else "'%s'".format(q)
  doSomething(q2)
}

1つのオプションは、渡す場所にif-else式を渡すことですq2

private def formatQuery(q:String = ""):String =
  doSomething(if (q=="") "*" else "'%s'".format(q))

もう1つは、別の関数を作成することです。

private def formatQuery(q:String = ""):String =
  runQuery(if (q=="") "*" else "'%s'".format(q))

private def runQuery(q2:String):String =
  doSomething(q2)
于 2012-05-10T05:57:08.223 に答える
2

3 つ目の方法は、パターン マッチングです。

private def formatQuery(q: String = ""): String = q match {
  case _ if q.length == 0 => "*"
  case _ => "'%s'".format(q)
}

スタイルが良いので、私はあなたのやり方が好きです。

于 2012-05-10T06:20:31.897 に答える
1

誤解があるかもしれません: メソッド本体内のvalは、囲んでいるクラスまたはトレイトのフィールドではなく、単なるローカル変数です。したがって、キーワードvalは、フィールドの作成とローカル変数の作成に使用されます

于 2012-05-10T06:53:23.093 に答える