errors
boş bir List
olabilir ve A
türünde hiçbir değere sahip olmaya zorlandığınız için, bunu toplam işlev olarak yazabileceğinizi düşünmüyorum. Bu tür bir imzayı yazmak için, boş liste vakasının mevcut olmadığını varsayarak hile yapmanız gerekir, ör.
def reject[A](errors: List[String]): ValidationNEL[String, A] =
Failure(errors.toNel.get) // bad!
Düzenleme: Apocalisp işaret olarak, tabii ki boş listesi için bir hata getirerek, bu toplam fonksiyonu yapabilirsiniz. Neden olarak errors
geçemeyen
def reject[A](errors: List[String]): ValidationNEL[String, A] =
Failure(errors.toNel getOrElse NonEmptyList("Error: There were no errors!"))
: Ama sadece errors
zamanında hesaplanır ve şüpheli eğer o gibi saçma hatalara yol açacak şekilde bu, durumunuzun olmadığını yapacağını NonEmptyList
yerine - muhtemelen derleme zamanında kullanmak için hatalarınız varsa bu işlevi kullanırsınız.
def reject[A](errors: NonEmptyList[String]): ValidationNEL[String, A] =
Failure(errors)
Sen
NonEmptyList.apply
imzasını kopyalayarak (ve
String
bunu uzmanlaşmış) tarafından kullanmak için bu terser yapabilirsiniz
:
def reject[A](h: String, t: String*): ValidationNEL[String, A] =
Failure(NonEmptyList(h, t: _*))
Şunu deneyelim:
scala> reject("foo", "bar", "baz")
res0: scalaz.package.ValidationNEL[String,Nothing] = Failure(NonEmptyList(foo, bar, baz))
Sadece yapabilir boş liste de bir hata :) – Apocalisp
Bu doğru, ben bunu düşünmedim (duh). Bu hatalar, çalışma zamanında hesaplanırsa yararlı olur, ancak onun kodunda basit yazılar yazacağını varsaydım. Öyleyse, "hatalar, hatayı kodlara yazmayı unuttun", o zaman çalışma zamanında yararlı bir hata olur. –
Ya da gerçekten "Hata: Hata yok" gibi yararlı bir şey. – Apocalisp