gpt4 book ai didi

Scala 用于理解和循环

转载 作者:行者123 更新时间:2023-12-04 02:10:30 25 4
gpt4 key购买 nike

客观的

试图解密 for comprehension and loop以及它们的区别。

Expr1          ::=  `for' (`(' Enumerators `)' | `{' Enumerators `}')
{nl} [`yield'] Expr
Enumerators ::= Generator {semi Generator}
Generator ::= Pattern1 `<-' Expr {[semi] Guard | semi Pattern1 `=' Expr}
Guard ::= `if' PostfixExpr

问题

For 循环

A for loop for (enumsenums) ee executes expression ee for each binding generated by the enumerators enumsenums.



“执行表达式”意味着 For Loop 不会产生一个值作为结果,而只是对每个绑定(bind)应用一些操作,因此它基本上是一个 声明 (在我的理解中,在 Scala 中,表达式返回一个值,但语句没有)?

例如,下面将产生无。
val mnemonic = Map('2' -> "ABC", '3' -> "DEF")
val a = for ((digit, str) <- mnemonic) str.contains(digit)

供理解

A for comprehension for (enumsenums) yield ee evaluates expression ee for each binding generated by the enumerators enumsenums and collects the results.



而 For Comprehension 将通过收集评估 的结果生成一个集合对象作为结果。 Expr 每个绑定(bind)的表达式。如果是这样,装箱的集合的类型是什么?如果它是一种方法,我可以查看 API 文档,但哪个文档指定了 For comprehension 返回的类型?

最佳答案

for 循环为集合中的每个项目执行一个语句:

for (x <- List(1,2,3)) {
println(x)
}

将打印数字 1、2 和 3。循环的返回类型为 Unit ,有点像 void将在 Java 中,因此将其分配给任何东西都没有意义。

用于理解,使用关键字 yield , 只是 map 的语法糖或 flatmap .这两个语句是等价的:
val y1 = for (x <- List(1,2,3)) yield x+1
val y2 = List(1,2,3).map(x => x+1)

关于Scala 用于理解和循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39009094/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com