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

scala - 在 Scala 中使用 for-comprehension、Try 和序列

假设你有一堆方法:

并且您想要理解:

当然这不会编译,因为在这种情况下 Seq 不能与 Try 一起使用。

任何人都有一个很好的解决方案,如何在不将其分成单独的两个 for 的情况下编写干净的代码?

我已经第三次遇到这个语法问题,并认为是时候问这个问题了。

0 投票
2 回答
765 浏览

scala - 将 flatMap 转换为便于理解

给定foobar

我怎样才能把它转换flatMap成一个for-comprehension

请注意,我提供了以上内容作为Using for-comprehension, Try and sequences in Scala的答案,但我无法将其转换为for-comphension.

0 投票
1 回答
723 浏览

scala - Scala 在 for 循环外将集合类型变量初始化为 null 并将某些方法的返回值分配给循环内的变量

我是使用 Scala 的新手。

我有一个Vector包含Person对象的 Scala,我需要在这些对象上循环并将 Vector 的每个元素传递给personCollector返回值也是 Vector 的方法。for从循环下面的Scala REPL 输出中可以看出,它打印了personCollector三次返回的向量,这是因为people向量包含三个条目。但是我想只打印personCollector一次返回的向量,即在for 循环迭代结束之后。

在Java中,我可以按照以下方式进行:

但是我无法在 Scala 中执行上述操作。下面是我的 Scala 代码。

谢谢。

0 投票
2 回答
2491 浏览

scala - Scala 用于理解 - 使用复杂过滤器生成

我正在尝试在 Scala 中构建理解,但是当我尝试使用更复杂的过滤器时遇到了一些问题。

我知道理解过滤的基本知识:

但是,我想构建一个具有更复杂过滤语句的 for comprehension。例如,这是我正在尝试做的说明性版本:

基本上,如果你想用一些更复杂的要求做一个过滤器,这会变得很尴尬,因为 for 理解不允许在过滤器语句中声明 val,否则你必须将所有这些都放在一行中。

另一种选择是根本不使用过滤器机制,只产生 Some(element) 或 None,并最终得到一个 Option[elementType] 列表。但是,在这种情况下,我不想使用 Optional 类型。

当务之急,我只是创建一个可变列表,并且仅在满足我的条件时才附加到列表中,但我想看看如何以更多的声明方式来做到这一点(不是所有的声明方式,但我我还在学习!)。

任何关于好的声明性方法的建议都会非常有帮助。

0 投票
2 回答
835 浏览

scala - Scala for-comprehension for orElse 而不是 flatMap

我对for理解和flatMap选项非常熟悉。

所以我知道你可以做类似的事情

Some(z)如果 for 理解中没有任何内容,这给了我is None,因为它对flatMap每个语句都执行 a 。

但实际上我正在寻找相反的东西。我想遍历for理解,只要一切都是None,就像orElse一个for理解。

例如:

有没有这样的事情,或者最好的方法是什么?

提前致谢!

0 投票
2 回答
2367 浏览

scala - 如何在理解中等待 Scala Futures 的结果

我对以下代码有疑问。我希望在所有 groundCoffee、heaterWater、frothedMilk 方法完成后触发“combine”方法。它们将被同时触发。所有 4 种方法磨碎、加热水、泡沫牛奶、冲泡都是使用未来同时执行的。

当我执行上述方法时,我得到的输出如下

并且程序在此之后退出。当我试图学习期货时,我从一个网站上得到了这个例子。如何让程序等待,以便在所有期货返回后触发组合方法?

0 投票
3 回答
347 浏览

scala - 用于函数创建的理解和数量

最近我接受了 Scala 开发人员职位的面试。我被问到这样的问题

问题是:A 或 B 哪个实现更有效?

我们都知道for 推导式可以翻译成

B 可以写成matrix.foreach(row => row.foreach(print _))

假设正确答案是 B,因为 A 将创建print100 倍的函数。

我检查了语言规范,但仍然无法理解答案。有人可以向我解释一下吗?

0 投票
1 回答
1642 浏览

scala - Scala 的元组为 Right

假设我有以下代码:

当我在 REPL 中评估它时,我得到

:13: 错误:构造函数无法实例化为预期类型;找到:(T1,T2)需要:scala.util.Either[Nothing,(Double,Double)](a,b)<-a.right ^:14:错误:未找到:值a}产生a + b ^

为什么我有这样的错误?我不能对来自 Either's Right 的元组进行模式匹配吗?

0 投票
2 回答
220 浏览

scala - Scala:帮助我理解这段代码中的理解和案例类

我正在尝试围绕 Scala 进行研究,到目前为止,我发现它非常具有挑战性。我找到了这个库(https://github.com/snowplow/scala-maxmind-geoip),我过去使用 Python 来查找基于 IP 地址的国家/地区等内容。

所以这个例子很简单

并且文档显示

getLocation(ip) 方法返回一个 IpLocation 案例类

那么,如果它是一个案例类,为什么这不起作用呢?

毕竟我能做到

感谢您的时间!

0 投票
1 回答
388 浏览

scala - 为什么这个简单的 Scala 理解不执行期货?

我一直在弄清楚为什么这不起作用:

我期待这会打印“abc”,但实际上什么也没发生。