问题标签 [either]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
17307 浏览

scala - 在Scala中抛出异常,什么是“官方规则”

我正在关注 Coursera 上的 Scala 课程。我也开始阅读 Odersky 的 Scala 书。

我经常听到的是,在函数式语言中抛出异常并不是一个好主意,因为它会破坏控制流,我们通常会返回带有失败或成功的 Either。Scala 2.10 似乎也将提供朝着这个方向发展的 Try。

但是在本书和课程中,Martin Odersky 似乎并没有说(至少现在)异常是不好的,他经常使用它们。我还注意到方法 assert / require ...

最后我有点困惑,因为我想遵循最佳实践,但它们并不清楚,而且语言似乎是双向的......

有人可以解释我在这种情况下应该使用什么吗?

0 投票
3 回答
511 浏览

list - 从 Haskell 的列表中获取第一权利

首先,我有一个(无限的)Eithers 列表,它的生成方式如下:

该列表将包含几个Rights (总是一个有限的数字),然后Left重复相同的值。我需要的是把所有的Rights 和一个Left在他们之后。在这种特殊情况下,例如也可以通过更改函数来完成,但我也对最佳通用方法感兴趣。

0 投票
3 回答
1292 浏览

scala - 将 Iterable[Either[A,B]] 减少为 Either[A, Iterable[B]]

我需要将 Iterable[Either[Throwable, String]] 减少为 Either[Throwable, Iterable[String]]。我不知道这个操作是否很常见,在 Iterable 特征上没有发现任何东西。所以我写了这个函数:

如果不是这样,任何人都可以帮助我找到更好的方法吗?

0 投票
4 回答
6386 浏览

haskell - 映射到 Either 的左侧

在我的应用程序的某个地方,我收到了Either ParserError MyParseResult来自 Parsec 的消息。在下游,此结果通过使用其他库完成了一些其他解析。在解析的第二阶段,也可能会发生某种错误,我想将其作为 a 传递Left String,但为此我需要将结果从 Parsec 转换为String。为了实现这一点,我需要一个允许我使用函数映射 aLeftshow函数。

我正在考虑的映射函数看起来像这样:

但我很惊讶没有在 hackage db 上找到任何匹配的东西。所以现在我怀疑我是否使用了正确的方法来解决我的问题。

为什么标准库中没有这样的功能?我的方法有什么问题?

0 投票
2 回答
2963 浏览

haskell - 应用函子和左从

我一直在阅读这本很棒的好书,但我在 Applicative Functors 上有些挣扎。

在下面的示例max中应用了两个 Maybe 函子的内容并返回Just 6

为什么在以下示例中Left "Hello"返回而不是 Either 仿函数的内容:Left "Hello World"

0 投票
2 回答
2639 浏览

error-handling - EitherT 是如何工作的?

我花了半天时间试图弄清楚如何使用 EitherT 来处理我的代码中的错误。

我已经定义了一个这样的变压器堆栈。

只要我只使用ReaderTandStateT函数,它就可以很好地工作。我的印象是现在我应该能够写出这样的东西:

更重要的是从包中捕获Either应该可能的返回值:hoistEithererrors

我阅读了关于 monad 转换器的真实世界的 haskell章节并摆弄了lift. 但是我无法进行任何类型检查。

0 投票
2 回答
1185 浏览

java - 从 Java 中使用 scala.Either

我正在使用来自 java 的 scala 库,特别是一个返回Either[A, B]. 在我的 java 代码中,我可以这样做:

result.right()返回 a RightProjection,但我无法在 Java 中导入它(使用 IntelliJ)。有没有一种正确的方法来处理 Java 中的 Either 对象?

0 投票
3 回答
1155 浏览

scala - 如何从一个元组中收集一个 Either 的左边?

在对一堆类型为 Either[String, A] (其中 A 不止一种类型)的 Eithers 进行匹配之后,我想将左侧的任何字符串累积到一个列表中。

如果我尝试.productIterator.toList使用元组,我最终会得到 List[Any]。如果我分别处理每个失败的案例(右和左的组合),我最终会得到成倍数量的案例陈述。

如何在最后获得 List[Either[String, Any]] 以传递给我的 accLefts 调用?或者我应该做一些除了比赛之外的事情吗?

0 投票
1 回答
2185 浏览

scala - 要么,选项和理解

我正在编写一个用于理解的代码,并且想知道一些事情:

似乎使用不返回 Either 的 copyUserWithStats 不能直接在 for 理解中使用,因为它没有 map/flatMap 方法。

所以我想知道,在这种情况下,使用它是合适的解决方案Right(copyUserWithStats(user,stampleCount)).right

它似乎至少可以工作......

顺便说一句,我也尝试了 Option 但它没有用,有人可以解释为什么吗?

谢谢

0 投票
1 回答
786 浏览

scala - 要么一元操作

我刚开始习惯于处理一元操作。对于 Option 类型,Tony Morris 的这份备忘单有所帮助: http ://blog.tmorris.net/posts/scalaoption-cheat-sheet/

所以最后似乎很容易理解:

  • map 转换选项内部的值
  • Option[Option[X]]展平许可证以进行改造Option[X]
  • flatMap 在某种程度上是一个地图操作,产生一个Option[Option[X]]然后展平为Option[X]

至少到目前为止我是这么理解的。


对于 Either,它似乎有点难以理解,因为 Either 本身没有正确的偏见,没有 map / flatMap 操作......而且我们使用投影。

我可以阅读 Scaladoc,但它不如选项备忘单那么清晰。有人可以提供一个 Either Sheet Cheat 来描述基本的一元操作吗?

在我看来,这Either.joinRight有点像RightProjection.flatMap并且似乎相当于Option.flattenfor Either。

在我看来,如果Either是右偏,那么 Either.flatten 将是 Either.joinRight 不?

在这个问题中:我询问关于 Eiher 理解的选项和理解,其中一个答案说我们不能混合 monad,因为它被脱糖到 map/flatMap/filter 中的方式。

使用这种代码时:

这是否意味着我所有的 3 个方法调用必须始终返回Either[Error,Something]?我的意思是,如果我有一个方法调用Either[Throwable,Something],它就不能正常工作?


编辑: Try[Something] 与右偏的 Either[Throwable,Something] 完全相同吗?