问题标签 [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 投票
3 回答
195 浏览

ruby-on-rails - 在 Rails 中编写“(x AND y)OR(a AND b)”查询的最佳方法是什么?

在 Rails 中编写“(x AND y)OR(a AND b)”查询的最佳方法是什么?

我刚刚编写了以下消息方法来返回两个用户之间的消息。选择是在两个用户之间获取消息,即给我消息从我给他们他们给我

它有效,但看起来很可怕。有没有更简单/更好的写法?

注意感谢吉米,我最终得到了:

0 投票
1 回答
3707 浏览

scala - scala Either.RightProjection 混淆(用于理解去糖)

我可以=在 scala 中使用 an 进行理解(如SLS的第6.19节中所述),如下所示:

选项

假设我有一些功能String => Option[Int]

然后我可以这样使用它

据我了解,这基本上等同于:

也就是说,嵌入式生成器是将 a 注入map到一系列flatMap调用中的一种方式。到现在为止还挺好。

无论是.RightProjection

我真正想做的是使用与前面使用Eithermonad的示例类似的理解。

但是,如果我们在类似的链中使用它,但这次使用Either.RightProjectionmonad/functor,它就不起作用:

然后使用:

这个问题与右投影期望作为其flatMap方法的参数的函数有关(即它期望一个R => Either[L, R])。但是修改为不调用right第二个生成器,它仍然不会编译。

大混乱

但现在我变得双重困惑。以下工作正常:

但这不会:

我认为这些是等价的

  • 到底是怎么回事?
  • 如何将=生成器嵌入到一个 for 理解中Either
0 投票
3 回答
18713 浏览

scala - 使用带有 Scala "for" 语法的 Eithers

据我了解,Scala 的“for”语法与 Haskell 的一元“do”语法极为相似。在 Scala 中,“for”语法通常用于Lists 和Options。我想将它与Eithers 一起使用,但默认导入中不存在必要的方法。

是否可以通过某些导入获得此功能?

有一个小问题:

对于列表,它将是List(). 因为Option,它会None。Scala 标准库是否为此提供了解决方案?(或者也许scalaz?)如何?假设我想为 Either 提供我自己的“monad 实例”,我该怎么做呢?

0 投票
2 回答
195 浏览

haskell - 捕获错误引发的错误?

有一些 stdlib 函数会在无效输入时引发错误。例如:

我想把它换成返回 a Either e a。我怎样才能做到这一点?

0 投票
1 回答
446 浏览

scala - scala 要么 & 不处理

不知道该怎么称呼它,Option 和 Either 一样合适,无论如何我都需要处理第三种情况。

Scalaz 可能已经提供了类似的东西,但我很想知道如何在没有单独的库的情况下简洁地处理以下简单情况:

我需要检查用户会话是否存在,无论是实际用户还是管理员以用户身份登录的场景,后者优先于前者;如果两个条件都不存在,则显示登录屏幕。

实际的用户会话检查如下所示:

我需要添加管理员模拟用户案例:

我可以 getOrElse 这一切,但更愿意清理一下,无论用户或管理员作为用户的情况,操作都是相同的。

0 投票
3 回答
1263 浏览

scala - Scala:是否是唯一的选择?

关于潜在的运行时故障,如数据库查询,似乎必须使用某种形式的Either[String, Option[T]]才能准确捕获以下结果:

  1. 一些(找到的记录)
  2. 无(未找到记录)
  3. SQL 异常

选项根本没有足够的选项。

我想我需要深入研究 scalaz,但现在它是直接的,除非我在上面遗漏了一些东西。

我的 DAO 实现让自己陷入了困境,只使用 Either 进行写入操作,但现在我看到一些 Either 写入依赖于 Option 读取(例如检查新用户注册时是否存在电子邮件),这是一个非常糟糕的赌博.

在我全力以赴之前,是否有人有替代解决方案来处理成功/失败/异常的运行时三重奏?

0 投票
2 回答
1241 浏览

scala - 用于过滤输入列表的 Scala 多态函数

寻求更优雅的解决方案

我有这段代码,我只是在不需要进行任何错误处理的测试用例中使用它。它的作用是:

  • 获取字符串的输入列表
  • 使用 DSJSonmapper.parseDSResult 方法解析它们
  • 过滤它们并从每个 Either 中提取 Right 值(Left 是一个例外)

代码如下:

现在,我还没有做很多多态函数,但这很有效。不过我觉得有点丑。有没有人有更好的建议,如何完成同样的事情。

我知道这将归结为个人喜好。但欢迎提出建议。

0 投票
3 回答
3959 浏览

scala - 使用 Either 链接方法调用

我想知道是否可以创建某种“方法调用链”,所有方法都返回相同的 Either[Error,Result]。

我想做的是:依次调用所有方法,当方法返回一个Left(错误)时,停止方法调用并返回调用链中找到的第一个Left。

我尝试了一些东西,包括折叠、地图、投影......但我是 Scala 新手,没有找到任何优雅的解决方案。

我尝试过这样的事情:

但它不起作用。无论如何,我真的不喜欢它需要的缩进。此外,我想将错误转换为描述问题的新字符串(我想我应该使用折叠?)

我正在寻找这样写的东西:

有可能用 Scala 做这样的事情吗?也许同时使用 Either 和 Option?

一个限制也是,如果第一次调用失败,则不应进行其他调用。我不想要一个我调用所有东西然后加入其中一个的解决方案。

谢谢!

0 投票
4 回答
9152 浏览

scala - Scala中的方法参数验证,用于理解和单子

我正在尝试验证无效方法的参数,但我没有找到解决方案......

有人可以告诉我该怎么做吗?

我正在尝试这样的事情:

0 投票
1 回答
888 浏览

java - 使用 Either 处理失败 -> 堆栈跟踪在哪里?

我从一些人那里听说,在 Scala 中,我们倾向于(像其他函数式语言一样)不破坏控制流......相反,按照惯例,我们在Either Left.

但是我们如何从那个异常中得到 stracktrace 呢?现在我在左侧返回一个简单的Error案例类,其中包含代码、消息和原因(Error也)。但是,如果我有错误,我无法获得堆栈跟踪。如果我的应用程序变得复杂,可能很难找到返回的代码块Error......根本原因是必不可少的。


那么我们在实践中该怎么做呢?

我应该返回,而不是自定义Error的 java 类型Exception还是Throwable我的Left?在不丢失堆栈跟踪和原因等重要信息的情况下,Scala 异常处理的最佳实践是什么?