2009-09-01 20 views
20

this one gibi sorulardan gelen cevapların, NPE'yi yakalamaya çalışmak ve yığın izini yığın izinden dışarı atmak gibi korku gösterileriyle birlikte gördüğünü gördüğümde, bu soruyu soruyorum. Yorumlar veya daha fazla iyileştirme hoş geldiniz. böylece gibiScala'da null güvenli bir birleştirme operatörü nasıl yazılır?

+3

. Ya da belki de. –

+3

Eğer öyle diyorsan. Bir soruya cevap verdikten sonra 24 saatten fazla bir soru sorduğumda, göreceli liyakati ne olursa olsun, kararsızlık içinde kararsız kalıyor (ve cevabın sadece cevabını cevapladığımda cevabımın değeri hakkında bir fikrim var.) – extempore

+0

teşekkürler istisnaları içeren bir çözüm görmek için bir korku. Uygulamanızı birkaç derecelik büyüklükte yavaşlatmak istemediğiniz sürece. – smartnut007

cevap

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)) 
} 

Ve eylemde: Yeni bir topluluk oluşturmak yerine bu soruyu cevap olmalıydı

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

bu gerçekten Oldukça serin – jpswain

+8

Ben bu gözlem yapmak için yedi yıl bekledim! Teşekkürler. – extempore