我正在尝试学习scala,我正在努力理解为什么以下是合法的:
for (idx <- 1 to 10) yield idx
Run Code Online (Sandbox Code Playgroud)
但以下是不合法的.
for (idx <- 1 to 10) { yield idx }
Run Code Online (Sandbox Code Playgroud)
它们在语法上看起来是一样的.我错过了什么?
提前致谢.
因为这是解析器的工作方式,所以这是Scala规范的部分:
Expr1 ::= ‘for’ (‘(’ Enumerators ‘)’ | ‘{’ Enumerators ‘}’)
{nl} [‘yield’] Expr
Run Code Online (Sandbox Code Playgroud)
它说我们可以拥有一个或多个这样命名的枚举器,{nl}说我们可以嵌套多个for类似的
for(...)
for(...)
...
Run Code Online (Sandbox Code Playgroud)
我们可以添加可选yield关键字后跟表达式,但没有大括号的位置.在它自己的表达(体)可以(idx),{idx},只是idx或别的东西,所以这是合法的:
for (idx <- 1 to 10) yield { idx }
Run Code Online (Sandbox Code Playgroud)