问题标签 [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.
scala - 对于地图查找的理解 - 有没有更好的方法?
考虑以下
我想遍历可能的键,如果地图包含一个,则遍历地图的值
我想出的选项是:
带过滤器
和getOrElse
(两者都返回相同的结果:)
因为我知道 Scala 支持理解中的选项,所以我有点惊讶这不起作用
它抱怨type mismatch; found : List[Int] required: Int
我隐约明白为什么,但是有没有办法在没有if
条款或getOrElse
方法的情况下完成这项工作?(例如,有没有办法让myMap.get(key)
版本工作?)
scala - 反省理解
如何做 Scala 等价于这个 Java 代码:
scala - Scala 用于理解类型推断
下一个代码
给出错误信息
请帮助我理解为什么'for'在这里选择最通用的 Any 而不是 Char ?我应该阅读语言规范中的哪些主题?谢谢。
scala - 在 Scala 中使用 for 理解
你好,
我在上面的代码片段中找不到任何缺陷,但它仍然给我 List() 任何输入。
scala - Scala for/yield 的返回类型
我正在为不耐烦的人阅读Scala,我遇到了一些让我摸不着头脑的东西。
以下返回一个字符串:
但这会返回一个向量:
这两个例子前面的文字是……
“当for循环的主体以yield开头时,然后循环构造一个值的集合,每次迭代一个......这种类型的循环称为for理解。生成的集合与第一个生成器兼容。
如果生成的集合与第一个生成器兼容,那么为什么第二个示例不返回 Range 类型,如下所示:
还是我完全误解了文本的含义,“......生成的集合与第一个生成器兼容”。
scala - 如何表达 [42 | x == y] 与 for 理解?
我有一些代码在其中生成多个列表(通过理解),然后将它们连接起来。但是,有些单元素列表不起作用。在 Haskell 我会做类似的事情
等效地是
或者
在斯卡拉我试过
但它说“简单模式的非法开始”。
在回答 Scala 的产量是什么时,作者说“Scala 的“for comprehensions”等同于 Haskell 的“do”notation”。
此外,在Scala 网站上,它说“理解具有(enums) yield e的形式,其中 enums 是指以分号分隔的枚举器列表。枚举器要么是引入新变量的生成器,要么是过滤器”。但显然,情况并非如此,因为过滤器似乎只允许在生成器之后使用。
目前我使用
对于这种特殊情况,我可能不喜欢 for 理解语法,而只使用 if-then-else 代替。在 Haskell 中,由于与数学集合构建符号的相似性,它看起来相当不错。
我的问题不是关于风格,而是更多关于技术细节:为什么在 Haskell 和 Scala 之间的这个特定案例中存在差异?为什么不for (if i == j) yield 42
工作?
scala - Scala 用于理解和 flatMap / map 中间结果
从我第一次读到:
翻译为:
我担心filter
, flatMap
&返回的不必要的中间集合map
。第一个是通过添加withFilter
方法在 Scala 2.8(?) 中修复的,我怀疑有一些魔术会根据使用情况改变这些方法的返回类型,因此当用作参数时,flatMap
它们会返回非严格集合,但我找不到任何证据。我的怀疑是正确的,它并不像乍一看那样无效吗?
scala - 具有唯一数字的所有 N 位长数字的列表
我正在尝试构建具有唯一数字的所有 N 位长数字的列表,但我无法弄清楚如何将其概括为更大问题的一部分,为此我需要所有(1 到 N ) 具有唯一数字的长数字。
这是 n = 4 的手写代码:
scala - Scala 2.10.1 中的新脱糖行为
假设我有这个单子类:
以下来自 2.10.0 REPL 会话:
这是 2.10.1 中的相同内容:
这完全出乎我的意料(对我而言),并且在过滤需要额外约束(例如 Scalaz\/
或EitherT
)的情况下会导致特别令人困惑的错误。
我无法在2.10.1 发行说明中找到有关此更改的任何讨论。有人能指出这种新的脱糖行为是在哪里以及为什么引入的吗?