質問

@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?:&quot; Lucas&quot; &quot; Lucas&quot; を取得し、 name。?:{&quot; Lucas&quot;} は< code> Paulo ?新しい構造タイプは、 nullではない、つまり上記のコードの&quot; Paulo&quot; である場合、すべての初期値を返すことになっています。

少し混乱しています。説明はありますか?

役に立ちましたか?

解決

演算子はで終わります。つまり、中置表記法では右から左に読みます。例:

scala> 1 :: Nil == Nil.::(1)
res2: Boolean = true

ただし、すべてのメソッドは左から右へドット表記で読み取ります。したがって、実際には、中置表記法では Lucas に、ドット表記法では name にメソッドを適用しています。

ところで、エルビス演算子はではありませんでしたJava 7に含めるために承認

他のヒント

レコード(次の記事を検索してこのスレッドを見つけます...)について、ダニエル・シュピーワク(Scalaの世界で有名な別のダニエル...)は Groovy&#8217;のScalaでのエルビス演算子の実装

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top