Scalaz 验证忽略 Apply 方法
Scalaz Validation disregard Apply method
(List("ha", "heh", "hmm") |@| List("?", "!", ".")) {_ +"doeswork"+ _}
returns正确
res0: List[String] = List(hadoeswork?, hadoeswork!, hadoeswork., hehdoeswork?, hehdoeswork!, hehdoeswork., hmmdoeswork?, hmmdoeswork!, hmmdoeswork.)
同时
(Validation.failure[String, String]("fail") |@| Validation.failure[String, String]("fail")) {_ +"doesnotwork"+ _}
returns总是
res1: scalaz.Validation[String,String] = Failure(failfail)
无论您传递给 "unlift" 值的什么函数。
知道为什么吗?
它不会这样做 "invariably"。如果你试过
("fail".success[String] |@| "fail".success[String]) {_ +"doesnotwork"+ _}
会 return Success(faildoesnotworkfail)
。但由于并非所有传递给 |@|
的值都是 Success
,因此它没有任何东西可以应用 {_ + "doesnotwork" + _}
,因为此操作是针对成功案例,而不是针对失败案例。
成功案例是做计算。失败案例只有 return 组合错误消息。如果您尝试对 Failure
进行计算,实际上并没有计算出任何有趣的内容,只有错误摘要被 returned.
在您的特定情况下,恰好是 似乎 函数适用,因为成功值和失败消息具有相同的类型。但是,在一般情况下,failure
消息的类型甚至不必对传递的函数类型做任何事情,而是 {_ +"doesnotwork"+ _}
。例如,您的 Success
值可以是 Double
,然后您可以使用 {(x, y) => math.atan2(y, x)}
而不是 {_ +"doesnotwork"+ _}
,这对 String
没有任何意义-输入 Failure
-条消息。
(List("ha", "heh", "hmm") |@| List("?", "!", ".")) {_ +"doeswork"+ _}
returns正确
res0: List[String] = List(hadoeswork?, hadoeswork!, hadoeswork., hehdoeswork?, hehdoeswork!, hehdoeswork., hmmdoeswork?, hmmdoeswork!, hmmdoeswork.)
同时
(Validation.failure[String, String]("fail") |@| Validation.failure[String, String]("fail")) {_ +"doesnotwork"+ _}
returns总是
res1: scalaz.Validation[String,String] = Failure(failfail)
无论您传递给 "unlift" 值的什么函数。 知道为什么吗?
它不会这样做 "invariably"。如果你试过
("fail".success[String] |@| "fail".success[String]) {_ +"doesnotwork"+ _}
会 return Success(faildoesnotworkfail)
。但由于并非所有传递给 |@|
的值都是 Success
,因此它没有任何东西可以应用 {_ + "doesnotwork" + _}
,因为此操作是针对成功案例,而不是针对失败案例。
成功案例是做计算。失败案例只有 return 组合错误消息。如果您尝试对 Failure
进行计算,实际上并没有计算出任何有趣的内容,只有错误摘要被 returned.
在您的特定情况下,恰好是 似乎 函数适用,因为成功值和失败消息具有相同的类型。但是,在一般情况下,failure
消息的类型甚至不必对传递的函数类型做任何事情,而是 {_ +"doesnotwork"+ _}
。例如,您的 Success
值可以是 Double
,然后您可以使用 {(x, y) => math.atan2(y, x)}
而不是 {_ +"doesnotwork"+ _}
,这对 String
没有任何意义-输入 Failure
-条消息。