Bạn dường như đang sử dụng xác thực cho tác dụng phụ. Đây không phải là ý nghĩa của nó. Bạn sử dụng các giá trị trả về trong lập trình hàm.
Xác thực trong một sự hiểu biết tiếp tục với thành công, nhưng bị hỏng khi thất bại và trả về lỗi.
scala> def g(i: Int): Validation[String, Int] = {
println(i); if(i % 2 == 0) i.success else "odd".fail
}
g: (i: Int)scalaz.Validation[String,Int]
scala> val result = for {
| i <- g(1)
| j <- g(2)
| } yield (i,j)
1
result: scalaz.Validation[String,(Int, Int)] = Failure(odd)
scala> val result = for {
| i <- g(2)
| j <- g(1)
| } yield (i,j)
2
1
result: scalaz.Validation[String,(Int, Int)] = Failure(odd)
scala> val result = for {
| i <- g(2)
| j <- g(2)
| } yield (i,j)
2
2
result: scalaz.Validation[String,(Int, Int)] = Success((2,2))
scala> val result = for {
| i <- g(1)
| j <- g(1)
| } yield (i,j)
1
result: scalaz.Validation[String,(Int, Int)] = Failure(odd)
Nguồn
2011-08-10 20:01:01
Xin chào một chút lạ khi thấy những gì bạn muốn đạt được. Nếu bạn muốn xác nhận chuỗi tôi đề nghị xem ở đây (applicative) trong dòng 97 có thể giúp: https: //github.com/scalaz/scalaz/blob/master/example/src/main/scala/scalaz/example/ExampleValidation .scala – AndreasScheinert