在Scala for Expresisons中,Yield语法明显不一致?

Rob*_*Jr. 0 scala

我正在尝试学习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)

它们在语法上看起来是一样的.我错过了什么?

提前致谢.

om-*_*nom 9

因为这是解析器的工作方式,所以这是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)