试图解密的理解和循环和它们的区别。
Expr1 ::= `for' (`(' Enumerators `)' | `{' Enumerators `}')
{nl} [`yield'] Expr
Enumerators ::= Generator {semi Generator}
Generator ::= Pattern1 `<-' Expr {[semi] Guard | semi Pattern1 `=' Expr}
Guard ::= `if' PostfixExpr
对于循环
for(enumsenums)ee的for循环针对由枚举器枚举生成的每个绑定执行表达式ee。
“执行表达式”意味着For Loop将不会产生结果值,而只是对每个绑定应用一些操作,因此它基本上是一条语句(据我所知,在Scala中,表达式返回一个值,但一条语句不会返回) ?
例如,在下面将不会产生任何结果。
val mnemonic = Map('2' -> "ABC", '3' -> "DEF")
val a = for ((digit, str) <- mnemonic) str.contains(digit)
为了理解
用于(枚举)产量ee的for表达式将计算枚举数枚举所生成的每个绑定的表达ee并收集结果。
而For Comprehension将通过收集对每个绑定的Expr表达式求值的结果来生成一个收集对象。如果是这样,货箱的类型是什么?如果这是一种方法,我可以查看API文档,但是哪个文档指定了For comprehension返回的类型?
for循环为集合中的每个项目执行一条语句:
for (x <- List(1,2,3)) {
println(x)
}
将打印数字1、2和3。循环的返回类型为Unit
,有点像void
Java中的那样,因此将其分配给任何对象都没有意义。
使用关键字for的a理解yield
只是map
or的语法糖flatmap
。这两个语句是等效的:
val y1 = for (x <- List(1,2,3)) yield x+1
val y2 = List(1,2,3).map(x => x+1)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句