2

パラメータの最も一般的なシナリオが「null」であるプレイテンプレートがあります。
私は、慣用的なScalaが代わりにOptionを好むことを理解しました。
私の最初のJavaからの直感は、nullを使用することです。

nullの場合:
コントローラー内

views.html.addPost(errors.errorsAsJson)

ビューで

@(errors: play.api.libs.json.JsValue = null) 
...
@if(errors != null){@errors}

オプションの場合:
コントローラー内

views.html.addPost(Option(errors.errorsAsJson))

ビューで

@(errors: Option[play.api.libs.json.JsValue] = None)
...
@{errors match {
      case None => {}
      case _ => {errors.get}
    }
}

更新:私は今それを手に入れました。
それ以外の:

@{errors match {
    case None => {}
    case _ => {errors.get}
 }
}

私はただすることができた

@errors

更新2: どうやら私もnullでnullチェックを行う必要はありませんでしたか?多分いくつかのPlay framework魔法?null変数の呼び出しは、例外なく機能しました。

4

1 に答える 1

9

冗長性が低い理由Optionは、これらのnullチェックを実行する必要がないためです。言い換えれば、あなたのmatch/case冗長性は不要です。

次の2つの変数があると仮定します。

val x: Option[Int] = Some(5)
val y: Option[Int] = None

Someではなく関数を呼び出したい場合はNone、nullチェックを行う必要はありません。

x foreach println  // prints 5
y foreach println  // nothing printed

または、関数を適用して新しい結果を取得する場合も同様であり、入力が存在するかどうかを追跡します。

val f = (i: Int) => i + 1
x map f  // Some(6)
y map f  // None

Option物事をクリーンアップする方法の例は他にもたくさんありますが、これでアイデアが得られるはずです。

于 2012-04-30T21:29:59.303 に答える