问题标签 [for-comprehension]

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 投票
0 回答
30 浏览

javascript - 多个数组的理解

我知道 JavaScript,但不知道真正的 JavaScript 是什么。所以我决定从头开始学习该语言的内部工作原理。

当我偶然发现 Comprehension 信息时,我正在浏览 MSDN 并阅读有关 Arrays 的信息。我想知道,是否可以使用多个数组的值并将它们连接到理解本身?

我试过这样的事情:

它当然不起作用,以及我检查的其他一些结构 - 互联网并没有满足我的好奇心。我从这里得到的唯一提示,但那里的代码并不完全符合我的要求。

理解中使用的语句和表达式与外部是否有任何关系?在上面的 URL 中,使用了多个“for each”,就目前而言,我未能学习如何从标准表达式构建这些结构。

0 投票
3 回答
51 浏览

python-3.x - 你如何通过理解检查元素是否已经在列表中?

当我在理解中进行操作时,您如何检查一个元素是否已经在列表中?

例如,在下面的理解中说我想限制重复的数字虽然我根本不是在寻找唯一的数字,但我想通过 if 条件来防止。

我正在寻找类似的东西

0 投票
1 回答
759 浏览

scala - Scala - for 理解的模式匹配结果

我目前正在对理解结果进行模式匹配,如下所示

然而,这感觉有点过于冗长 - 有没有更简洁的表达方式?

理想情况下,我想做类似的事情

但是,如果不将整个 for-comprehension 括在括号中,这在 Scala 中似乎是不可能的。

是否有一种更简洁/更优雅的方式来表达这种逻辑?

0 投票
2 回答
1668 浏览

scala - Scala 用于理解 Try 中的序列

我正在编写一个 Scala 程序,其中有一个创建序列的操作。该操作可能会失败,所以我将它包含在一个Try. 我想在 for 理解中进行序列创建和枚举,以便成功创建的序列产生一个元组序列,其中第一个元素是序列,第二个元素是它的一个元素。

为了简化问题,让我的整数序列 aRange并定义一个createRange函数,如果它被要求创建一个奇数长度的范围,它将失败。这是一个简单的理解,可以满足我的要求。

如果你运行它,它会正确打印。

现在我想重写我的rangeElements函数,以便它返回一个整数序列,而不是作为副作用打印,如果未创建范围,则该序列为空。我想写的是这个。

这给了我两个类型不匹配的编译器错误。r <- createRange(n)需要Seq[Int]但找到的行scala.util.Try[Nothing]x <- r需要scala.util.Try[?]但找到的行scala.collection.immutable.IndexedSeq[Int]

大概有某种类型的擦除Try让我感到困惑,但我无法弄清楚它是什么。我在 for comprehension 中尝试了各种限定词toOptiontoSeq但无济于事。

如果我只需要产生范围元素,我可以按照下面前两个答案的建议明确处理我自己的SuccessFailure条件。createRange但是,我需要访问范围及其各个元素。

我意识到这是一个听起来很奇怪的例子。我要解决的真正问题是复杂的递归搜索,但我不想添加它的所有细节,因为这只会混淆这里的问题。

如何编写rangeElements以产生所需的序列?

0 投票
2 回答
5915 浏览

scala - 结合EitherT和Future

我有一个应用程序可以对不同的后端系统进行大量调用,并希望使用 for-comprehensions 来简化跨后端系统的流程。

我希望将 EitherT (scalaz) 和 Future (scala 2.10) 结合起来,这样我就可以捕获第一个潜在错误(它是未来或后端系统问题)并向最终用户返回适当的消息。我已经快速浏览了一个 scalaz Validation,但是对于捕获第一个错误而不是所有错误的建议是使用 EitherT。

我首先在 REPL 中尝试一个简单的示例,但是我收到以下错误

错误:找不到参数 F 的隐式值:scalaz.Functor [scala.concurrent.Future]

我对 scala 和 scalaz 还是新手,所以任何指针都会很棒。

** 更新 **

通过包含基于@stew 建议的 scalaz-contrib,我现在有了一个更新版本,它显示了结合 EitherT 和 Future 的理解,显示了不同的简单用例后端成功、后端失败和未来失败

0 投票
4 回答
21003 浏览

scala - 带有过滤器的Scala Future以进行理解

在下面的示例中,我得到了异常java.util.NoSuchElementException: Future.filter predicate is not satisfied

我想Future( Test2 )在检查if( i == 2 )失败时得到结果。如何在处理组合期货的 for 理解中处理 filter/if?

下面是一个在 Scala REPL 中工作的简化示例。

代码:

0 投票
0 回答
472 浏览

scala - scala 为产量实例化案例类

我想知道是否有一种方法可以直接从 for comprehension 实例化案例类(在这种情况下,我使用 scalaz 验证函子),而无需手动输入来自 for comprehension 的参数

如果你有这样的案例类

然后假设你做这样的事情

所以我终于可以像这样使用它了

问题是,我没有得到 p 的案例类实例(显然 p 是不正确的,因为我只是使用了 apply)。

我问这个的原因是我有提供 20 多个变量的理解,并且必须将每个变量输入到案例类实例化中会产生很多样板文件

0 投票
2 回答
3028 浏览

scala - 用于 if 守卫的理解

如何使用 if guard 进行推导?

我在使用它时遇到了这个错误。

编辑: 我遇到了另一个错误。我认为如果使用防护,它会返回一个选项结果。

编辑2

0 投票
2 回答
314 浏览

scala - 对于 if guard throws error 的理解

当我以这种方式使用 if guard 进行理解时出现一个错误。

代码:

错误:

0 投票
2 回答
680 浏览

scala - 组成期货和期权

我有四种类型A,和B,类型的初始值和三个函数: ,和。CDxFuture[Option[A]]f1: A => Option[B]f2: B => Future[Option[C]]f3: C => D

我怎样才能写出一个从结果for开始的理解x,该类型的值Future[Option[D]]将是三个函数的“组合”?