Scala Implicit変換:呼び出す2つの方法
質問
@lucastex 投稿についてJava Elvisオペレーター。同じ効果を得るためにScalaで何かを試しました。
引数と同じ型のオブジェクトをとる?:
演算子を使用して、すべてを新しい構造型に変換しました。だから言う:
implicit def toRockStar[B](v : B) = new {
def ?:(opt: => B) = if (v == null) opt else v}
val name: String = "Paulo" // example
なぜ name?:" Lucas"
は" Lucas"
を取得し、 name。?:{" Lucas"}
は< code> Paulo ?新しい構造タイプは、 nullではない、つまり上記のコードの&quot; Paulo&quot;
である場合、すべての初期値を返すことになっています。
少し混乱しています。説明はありますか?
解決
演算子は:
で終わります。つまり、中置表記法では右から左に読みます。例:
scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true
ただし、すべてのメソッドは左から右へドット表記で読み取ります。したがって、実際には、中置表記法では Lucas
に、ドット表記法では name
にメソッドを適用しています。
ところで、エルビス演算子はではありませんでしたJava 7に含めるために承認
他のヒント
レコード(次の記事を検索してこのスレッドを見つけます...)について、ダニエル・シュピーワク(Scalaの世界で有名な別のダニエル...)は Groovy&#8217;のScalaでのエルビス演算子の実装。
所属していません StackOverflow