Scala 用于理解if-guard抛出的错误
当我以这种方式使用if-guard进行理解时,会出现一个错误 代码:Scala 用于理解if-guard抛出的错误,scala,monads,for-comprehension,either,Scala,Monads,For Comprehension,Either,当我以这种方式使用if-guard进行理解时,会出现一个错误 代码: 用于{ foo这就是我修复上述错误所做的。我还将if guard移到后面的过程中 val result = for { foo <- Right[String,String]("teststring").right bar <- Right[String,String]("teststring").right } yield (foo, bar) result fold ( ex => Left
用于{
foo这就是我修复上述错误所做的。我还将if guard移到后面的过程中
val result = for {
foo <- Right[String,String]("teststring").right
bar <- Right[String,String]("teststring").right
} yield (foo, bar)
result fold (
ex => Left("Operation failed with " + ex),
v => v match {
case (x,y) =>
if (x == y) Right(x)
else Left("value is different")
}
)
val result=for{
foo v match{
案例(x,y)=>
如果(x==y)右(x)
左上角(“值不同”)
}
)
你不能做你想做的事情,因为中所有语句的类型都是为了理解,而if(foo==bar)
过滤器表达式使最后一个表达式成为选项[要么[?,?]
而不是要么[?,?]
解决此问题的一种方法是将表达式分解为一系列flatMap
、map
和filter
表达式
另一种方法是丢失其中一个的左侧,只需使用右侧投影上的选项
方法,即:
for {
foo <- Left[String,String]("left").right.toOption
bar <- Right[String,String]("right").right.toOption if (foo == bar)
} yield (foo)
用于{
福
val result = for {
foo <- Right[String,String]("teststring").right
bar <- Right[String,String]("teststring").right
} yield (foo, bar)
result fold (
ex => Left("Operation failed with " + ex),
v => v match {
case (x,y) =>
if (x == y) Right(x)
else Left("value is different")
}
)
for {
foo <- Left[String,String]("left").right.toOption
bar <- Right[String,String]("right").right.toOption if (foo == bar)
} yield (foo)