当前位置: 首页 > 知识库问答 >
问题:

将Eithers与Scala“for”语法一起使用

农永宁
2023-03-14
for {
  foo <- Right(1)
  bar <- Left("nope")
} yield (foo + bar)

// expected result: Left("nope")
// instead I get "error: value flatMap is not a member..."
for {
  foo <- Right(1)
  if foo > 3
} yield foo
// expected result: Left(???)

共有1个答案

龙德义
2023-03-14

它在Scala2.11和更早版本中不起作用,因为要么不是单子。虽然有关于右偏置的讨论,但您不能在for-concerrition中使用它:您必须获得leftprojectrightproject,如下所示:

for {
  foo <- Right[String,Int](1).right
  bar <- Left[String,Int]("nope").right
} yield (foo + bar)

顺便说一下,返回left(“nope”)

在Scalaz上,您将或者替换为验证。有趣的事实:要么的原作者是Scalaz的作者之一Tony Morris。他想让要么偏右,但一个同事却说服了他。

 类似资料:
  • 问题内容: 我正在使用用Java(Selenium)编写的外部库。其中一个函数调用具有签名,当尝试从Scala调用它时,我不断收到编译器错误,即: 有没有解决此问题的方法? 问题答案:

  • 在我正在学习的书中,有一个练习: 编写一个循环,交换整数数组的相邻元素。例如,变成了。我的解决方案是: 该算法运行良好,但并没有完全利用Scala的潜力,就像我用C语言写的一样。 重复前面的赋值,但是用交换的值生成一个新数组。用于/产出。 现在我尝试了: 错误是:“值更新不是 scala.collection.immutable.IndexedSeq[Int] 的成员” 我该如何解决这个任务?我知

  • 问题内容: 我已经看过类似于此问题的各种问答,但是还没有找到解决方案。 我所拥有的一个枚举代表了观看电视指南的不同方式… 在NDroid 类中 …当用户更改视图时,事件处理程序会收到0-2的值,而我想做这样的事情… 在Android 事件处理程序中 我已经习惯了C#枚举和select / case语句,这些语句允许类似上面的内容,而且我知道Java的处理方式有所不同,但是我根本无法理解需要做什么。

  • 我目前正在将IntelliJ IDE用于复杂的GWT项目。我想在GWT的开发模式中利用JRebel,所以最近我为IntelliJ安装了JRebel插件,但在使其工作时遇到了麻烦。 基本上IntelliJ不具备在更改时自动编译应用程序的能力,所以每当您对代码进行更改时,我都必须进行编译- 信息:使用JavaC1.7.0_21编译java源代码信息:15个错误信息:0个警告信息:编译完成,9分钟5秒内

  • 问题内容: 我正在使用JDBC模板,并希望使用准备好的语句从数据库中读取数据。我遍历.csv文件中的许多行,并且在每一行上执行一些具有相应值的SQL选择查询。 我想加快从数据库中的读取速度,但是我不知道如何使JDBC模板与准备好的语句一起使用。 有PreparedStatementCreator和PreparedStatementSetter。如本例所示,它们都是使用匿名内部类创建的。但是在Pre

  • 问题内容: 考虑以下代码段: 显然不知道可以将a馈送到需要的方法(实际上,它的文档说它在寻找 具有指定名称和形式参数完全相同的方法 )。 是否有一种直接的方法来像上面那样以反射方式查找方法,但是要考虑多态性,以便上述反射示例在查询参数时可以找到该方法? 问题答案: 该反射教程 建议使用样本进行查找