问题标签 [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.
scala - 在Scala中抛出异常,什么是“官方规则”
我正在关注 Coursera 上的 Scala 课程。我也开始阅读 Odersky 的 Scala 书。
我经常听到的是,在函数式语言中抛出异常并不是一个好主意,因为它会破坏控制流,我们通常会返回带有失败或成功的 Either。Scala 2.10 似乎也将提供朝着这个方向发展的 Try。
但是在本书和课程中,Martin Odersky 似乎并没有说(至少现在)异常是不好的,他经常使用它们。我还注意到方法 assert / require ...
最后我有点困惑,因为我想遵循最佳实践,但它们并不清楚,而且语言似乎是双向的......
有人可以解释我在这种情况下应该使用什么吗?
list - 从 Haskell 的列表中获取第一权利
首先,我有一个(无限的)Either
s 列表,它的生成方式如下:
该列表将包含几个Right
s (总是一个有限的数字),然后Left
重复相同的值。我需要的是把所有的Right
s 和一个Left
在他们之后。在这种特殊情况下,例如也可以通过更改函数来完成,但我也对最佳通用方法感兴趣。
scala - 将 Iterable[Either[A,B]] 减少为 Either[A, Iterable[B]]
我需要将 Iterable[Either[Throwable, String]] 减少为 Either[Throwable, Iterable[String]]。我不知道这个操作是否很常见,在 Iterable 特征上没有发现任何东西。所以我写了这个函数:
如果不是这样,任何人都可以帮助我找到更好的方法吗?
haskell - 映射到 Either 的左侧
在我的应用程序的某个地方,我收到了Either ParserError MyParseResult
来自 Parsec 的消息。在下游,此结果通过使用其他库完成了一些其他解析。在解析的第二阶段,也可能会发生某种错误,我想将其作为 a 传递Left String
,但为此我需要将结果从 Parsec 转换为String
。为了实现这一点,我需要一个允许我使用函数映射 aLeft
的show
函数。
我正在考虑的映射函数看起来像这样:
但我很惊讶没有在 hackage db 上找到任何匹配的东西。所以现在我怀疑我是否使用了正确的方法来解决我的问题。
为什么标准库中没有这样的功能?我的方法有什么问题?
haskell - 应用函子和左从
我一直在阅读这本很棒的好书,但我在 Applicative Functors 上有些挣扎。
在下面的示例max
中应用了两个 Maybe 函子的内容并返回Just 6
。
为什么在以下示例中Left "Hello"
返回而不是 Either 仿函数的内容:Left "Hello World"
?
error-handling - EitherT 是如何工作的?
我花了半天时间试图弄清楚如何使用 EitherT 来处理我的代码中的错误。
我已经定义了一个这样的变压器堆栈。
只要我只使用ReaderT
andStateT
函数,它就可以很好地工作。我的印象是现在我应该能够写出这样的东西:
更重要的是从包中捕获Either
应该可能的返回值:hoistEither
errors
我阅读了关于 monad 转换器的真实世界的 haskell章节并摆弄了lift
. 但是我无法进行任何类型检查。
java - 从 Java 中使用 scala.Either
我正在使用来自 java 的 scala 库,特别是一个返回Either[A, B]
. 在我的 java 代码中,我可以这样做:
result.right()
返回 a RightProjection
,但我无法在 Java 中导入它(使用 IntelliJ)。有没有一种正确的方法来处理 Java 中的 Either 对象?
scala - 如何从一个元组中收集一个 Either 的左边?
在对一堆类型为 Either[String, A] (其中 A 不止一种类型)的 Eithers 进行匹配之后,我想将左侧的任何字符串累积到一个列表中。
如果我尝试.productIterator.toList
使用元组,我最终会得到 List[Any]。如果我分别处理每个失败的案例(右和左的组合),我最终会得到成倍数量的案例陈述。
如何在最后获得 List[Either[String, Any]] 以传递给我的 accLefts 调用?或者我应该做一些除了比赛之外的事情吗?
scala - 要么,选项和理解
我正在编写一个用于理解的代码,并且想知道一些事情:
似乎使用不返回 Either 的 copyUserWithStats 不能直接在 for 理解中使用,因为它没有 map/flatMap 方法。
所以我想知道,在这种情况下,使用它是合适的解决方案Right(copyUserWithStats(user,stampleCount)).right
它似乎至少可以工作......
顺便说一句,我也尝试了 Option 但它没有用,有人可以解释为什么吗?
谢谢
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.flatten
for Either。
在我看来,如果Either
是右偏,那么 Either.flatten 将是 Either.joinRight 不?
在这个问题中:我询问关于 Eiher 理解的选项和理解,其中一个答案说我们不能混合 monad,因为它被脱糖到 map/flatMap/filter 中的方式。
使用这种代码时:
这是否意味着我所有的 3 个方法调用必须始终返回Either[Error,Something]
?我的意思是,如果我有一个方法调用Either[Throwable,Something]
,它就不能正常工作?
编辑: Try[Something] 与右偏的 Either[Throwable,Something] 完全相同吗?