2011-12-29 33 views
6

Tôi đang tìm một giải pháp để kiểm tra nếu giá trị của bất kỳ loại nào trống (hoặc mặc định). I E. một số loại phương pháp trên Any mà kiểm tra nếu một trường hợp String bằng "", một Int - để 0, một Float - để 0f, một Boolean - để false, một List không chứa các mặt hàng và vân vân với nhiều loại khác. Primarilly Tôi quan tâm cho dù một số giải pháp đã tồn tại trong thư viện chuẩn và nếu không làm thế nào bạn sẽ thực hiện nó. Tôi tin rằng điều này có thể hữu ích và nếu nó không tồn tại trong thư viện chuẩn, nó nên được đề xuất.Thử nghiệm trên giá trị trống phổ dụng cho tất cả các loại

Trả lời

11

Sử dụng Zero loại lớp từ Scalaz.

scala> import scalaz._, Scalaz._ 
import scalaz._ 
import Scalaz._ 

scala> def isEmpty[A : Zero](value: A) = value == mzero[A] 
isEmpty: [A](value: A)(implicit evidence$1: scalaz.Zero[A])Boolean 

scala> isEmpty("") 
res0: Boolean = true 

scala> isEmpty(List()) 
res1: Boolean = true 

scala> isEmpty(false) 
res2: Boolean = true 

scala> isEmpty("O HAI") 
res3: Boolean = false 

Link to a blog post của tôi về một chủ đề liên quan.

+1

Bài đăng trên blog tuyệt vời! Tại sao bạn đề xuất giải pháp dựa trên Scalaz? –

+0

@NikitaVolkov: Bạn không cần phải sử dụng Scalaz. Tôi đã bao gồm một liên kết đến 'Zero.scala' trong Scalaz, và như bạn có thể thấy nó tầm thường để viết nó cho mình. – missingfaktor

2

Thay vì đi qua xung quanh việc loại T, bạn có thể vượt qua xung quanh việc loại Tùy chọn [T], gói tất cả mọi thứ có giá trị của loại T, như vậy

val thing = 1 
val thingOption = Some(thing) 

và lưu trữ tất cả dữ liệu không hợp lệ như Nones, như vậy

val thingOption = None 

Sau đó, nếu bạn muốn đưa ra quyết định dựa trên giá trị của thingOption, bạn có thể làm điều đó như thế này

thingOption match { 
    case None => // Whatever you want to do with defaults 
    case Some(x) => // Whatever you want to do with 'thing' if it isn't a default 
} 
+1

@NikitaVolkov, tôi đề xuất một thử nghiệm, đặt một lời nhắc nhở cho một năm kể từ bây giờ trong lịch của bạn với một liên kết đến câu hỏi của bạn. Khi lời nhắc bật lên, quay lại câu trả lời này và bình luận của bạn và xem bạn vẫn cảm thấy như vậy. – huynhjl

+0

@huynhjl Tôi biết rất rõ về lợi ích của phương pháp 'Option' trên phương thức' null', nhưng với nhận xét của tôi, tôi đã chỉ ra rằng đề xuất này không liên quan gì đến câu hỏi hiện tại. Có một đường viền khá chắc chắn giữa 'null' và' "" 'hoặc' 0' –

+0

Điều này không trả lời trực tiếp câu hỏi, nhưng có liên quan cao. Kiểm tra nếu một giá trị là "zero-esque" thường là dấu hiệu cho thấy bạn nên sử dụng Tùy chọn thay thế. –

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