thể trùng lặp:
How to write a proper null-safe coalescing operator in scala?Scala tương đương của ?? 'điều hành' trong C#
tương đương Scala của ??
điều hành trong C# là gì?
dụ:
string result = value1 ?? value2 ?? value3 ?? String.Empty;
thể trùng lặp:
How to write a proper null-safe coalescing operator in scala?Scala tương đương của ?? 'điều hành' trong C#
tương đương Scala của ??
điều hành trong C# là gì?
dụ:
string result = value1 ?? value2 ?? value3 ?? String.Empty;
Tôi không tin rằng có một. Bạn có thể xem this bài đăng để thực hiện toán tử kết hợp rỗng.
Bạn có thể viết riêng của mình với ngữ nghĩa giống hệt nhau - đây là câu khẳng định cùng loại trong suốt quá trình đánh giá từ trái sang phải, nhưng có thể thay đổi thành?: Để có được đánh giá từ phải sang trái mở rộng các loại theo nhu cầu:
class CoalesceNull[A <: AnyRef](a: A) { def ??(b: A) = if (a==null) b else a }
implicit def coalesce_anything[A <: AnyRef](a: A) = new CoalesceNull(a)
scala> (null:String) ?? (null:String) ?? "(default value)"
res0: String = (default value)
Nhưng lý do tại sao điều hành này không tồn tại có thể là Option
là cách ưa thích để đối phó với các tình huống như vậy cũng như nhiều trường hợp tương tự như xử lý các giá trị không tồn tại:
scala> List((null:String),(null:String),"(default value)").flatMap(Option(_)).headOption
res72: Option[java.lang.String] = Some((default value))
(Nếu bạn là chắc chắn rằng ít nhất một là không null, bạn chỉ có thể sử dụng head
; lưu ý rằng điều này hoạt động vì Option(null)
chuyển đổi thành None
và flatMap
chỉ tập hợp các mục nhập Some(_)
.)
Tôi tin rằng nó nên là 'def ?? (b: => A)' để làm cho các ngữ nghĩa giống hệt nhau. Tôi nghĩ rằng phía bên phải của toán tử elvis không được đánh giá trừ khi 'a' là' null'. Có thể là sai mặc dù. – sinharaj
@sinharaj - Có lẽ bạn đang đúng. Tôi không quen với cách C# làm điều này. –
Hãy thử getOrElse. Bạn tôi đề nghị.
Không phải là toán tử thích hợp nhưng có thể thuận tiện cho các biểu thức đơn giản: 'Tùy chọn (null: Chuỗi) .getOrElse (" giá trị mặc định ")' hoặc 'Tùy chọn (Tùy chọn (null: Chuỗi) .getOrElse (null: String)). GetOrElse ("giá trị mặc định") ' – karmakaze
Xem câu trả lời được liên kết, nhưng, nhiều hơn vào vấn đề này, tránh các giá trị rỗng. Sử dụng tùy chọn.
This blog post bao gồm cách triển khai "Nhà điều hành Elvis ?:
" của Groovy tại Scala. Điều này cũng giống như toán tử của C# '??
'.
http://stackoverflow.com/questions/1364361/how-to-write-a-proper-null-safe-coalescing-operator-in-scala? – Philippe