55得票4回答
使用Either处理Scala代码中的故障

Option 函子是 Scala 中处理“有可能存在或不存在”的值的非常表达性方法。但是如果需要在“不存在”时记录一条日志该怎么办呢?根据 Scala API 文档, Either 类型通常用作 scala.Option 的替代品,其中 Left 表示失败(惯例),而 Right 类似...

52得票2回答
在Scala中抛出异常,什么是“官方规定”?

我正在跟随Coursera上的Scala课程。 我也开始阅读Odersky的Scala书籍。 我经常听到在函数式编程语言中抛出异常不是一个好主意,因为它会破坏控制流,我们通常会返回一个包含失败或成功的Either。 似乎Scala 2.10也将提供Try,这是朝着这个方向发展的。 但是,在...

43得票4回答
理解Either如何成为Functor的实例

我在业余时间学习 Haskell,所以这是一个初学者问题。 在我的阅读中,我遇到了一个例子,展示了如何将 Either a 实现为 Functor 的实例:instance Functor (Either a) where fmap f (Right x) = Right (f x)...

43得票3回答
使用Scala的"for"语法与Eithers

据我所知,Scala的"for"语法与Haskell的monadic "do"语法非常相似。在Scala中,“for”语法经常用于List和Option。我想要在处理Either时也使用它,但是默认情况下没有必要的方法。for { foo <- Right(1) bar <...

42得票9回答
将一个Either列表转换为一个列表的Either,最佳方法是什么?

我有下面这段代码,其中我有一个Either列表,并且我想将其转换为一个列表的Either …… 特别是(在这种情况下),如果列表中有任何左值,则返回一个由它们组成的左值列表,否则返回一个由右值组成的右值列表。val maybe: List[Either[String, Int]] = getM...

38得票3回答
Clojure中的惯用错误处理方式

当我戴上我的C编程帽子时,我想也许惯用的Clojure方式就是做简单的事情并检查返回值。 当我戴上我的Java编程帽子(不情愿地,我必须补充一下),我认为由于Clojure运行在JVM上,自然的方式应该是使用JVM异常。 当我戴上我的函数式编程帽子时,我认为一定有某种单子结构或线程宏可以以...

35得票4回答
Scala中的方法参数验证,使用for comprehension和monads

我正在尝试验证一个方法的参数是否为空,但我找不到解决方案... 有人可以告诉我如何做吗? 我尝试了类似于这样的东西: def buildNormalCategory(user: User, parent: Category, name: String, description: Stri...

34得票4回答
获取Either的值

除了使用match,是否存在类似于Option的方式来获取Right或Left值的实际内容?scala> val x: Either[String,Int] = Right(5) scala> val a: String = x match { ...

33得票4回答
在Scala中将Option转换为Either

假设我需要在Scala中将Option[Int]转换为Either[String, Int]。我想像这样做: 假设我需要在Scala中将Option[Int]转换为Either[String, Int]。我想像这样做:def foo(ox: Option[Int]): Either[Stri...

32得票9回答
如何在Dart(Dartz)中轻松从Either类型中提取左侧或右侧

我希望能够轻松地从返回类型为 Either<Exception, Object> 的方法中提取一个值。 我正在进行一些测试,但是无法轻松地测试我的方法的返回结果。 例如: final Either<ServerException, TokenModel> resu...