2009-09-01 21 views
20

Sau khi xem câu trả lời sắp ra các câu hỏi như this one liên quan đến các chương trình kinh dị như cố gắng nắm bắt NPE và nạo vét tên bị xé ra khỏi dấu vết ngăn xếp, tôi hỏi câu hỏi này để tôi có thể trả lời.Làm thế nào để viết một nhà điều hành hợp tác không an toàn không hợp lệ trong scala?

Nhận xét hoặc cải tiến hơn nữa được chào đón.

+3

Bạn nên đã trả lời câu hỏi đó thay vì tạo một hình mới. Hoặc, có lẽ, ngoài. –

+3

Nếu bạn nói như vậy. Khi tôi trả lời một câu hỏi nhiều hơn khoảng 24 giờ sau khi nó được hỏi câu trả lời yếu đi trong sự tối tăm, bất kể thành tích tương đối của nó (và cho rằng tôi chỉ trả lời câu hỏi scala tôi có một số ý tưởng về giá trị của câu trả lời của tôi.) – extempore

+0

cảm ơn, nó đã được một nỗi kinh hoàng khi thấy một giải pháp có liên quan đến ngoại lệ. trừ khi bạn muốn làm chậm ứng dụng của mình một vài bậc độ lớn. – smartnut007

Trả lời

33

Giống như vậy:

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

Và trong hành động:

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

điều này thực sự khá mát mẻ – jpswain

+8

Tôi đã chờ đợi bảy năm cho một ai đó để thực hiện quan sát đó! Cảm ơn. – extempore

Các vấn đề liên quan