2009-09-01 13 views
20

ホラーを含むthis oneのような質問から出てくる答えを見ると、NPEを捕まえようとしているように見えて、スタックトレースからマージされた名前を捨てるようになるので、私はこれに答えることができます。適切なヌル安全な結合演算子をスカラーに書く方法は?

コメントや改善を歓迎します。そのよう

+3

。または、おそらく、に加えて。 –

+3

もしそうなら。私が約24時間以上の質問に答えると、その答えは、その相対的なメリットにかかわらず、あいまいになってしまいます(そして私はスカラの質問に答えるだけで、私は自分の答えの価値について考えています)。 – extempore

+0

例外を含む解決策を見て恐怖。あなたのアプリケーションを何桁も遅くしたいのでない限り。 – smartnut007

答えて

33

case class ?:[T](x: T) { 
    def apply(): T = x 
    def apply[U >: Null](f: T => U): ?:[U] = 
    if (x == null) ?:[U](null) 
    else ?:[U](f(x)) 
} 

とアクションで:あなたは新しいものを作成するのではなく、その質問に答えているはず

scala> val x = ?:("hel")(_ + "lo ")(_ * 2)(_ + "world")() 
x: java.lang.String = hello hello world 

scala> val x = ?:("hel")(_ + "lo ")(_ => (null: String))(_ + "world")() 
x: java.lang.String = null 
+0

これは本当にかなり涼しい – jpswain

+8

私は誰かがその観察をするために7年間待っていた!ありがとう。 – extempore

関連する問題