我见过for循环,括号()和花括号{}的理解看起来非常相似。在我写这段代码之前,我一直认为它们是一样的:
版本1:
def findChar(c: Char, levelVector: Vector[Vector[Char]]): Pos = {
val positions =
for {
row_index <- 0 to levelVector.length - 1
col_index <- 0 to levelVector(row_index).length - 1
if (levelVector(row_index)(col_index) == c)
} yield Pos(row_index, col_index)
if (positions.length == 1) positions.head
else throw new Exception(s"expected to find 1 match, but found ${positions.length} matches instead")
}
第2版:
def findChar(c: Char, levelVector: Vector[Vector[Char]]): Pos = {
val positions =
for (
row_index <- 0 to levelVector.length - 1;
col_index <- 0 to levelVector(row_index).length - 1;
if (levelVector(row_index)(col_index) == c)
) yield Pos(row_index, col_index)
if (positions.length == 1) positions.head
else throw new Exception(s"expected to find 1 match, but found ${positions.length} matches instead")
}
版本1具有花括号,而版本2具有括号。但是我也注意到版本2没有在箭头行末端没有使用半冒号的情况下编译。为什么是这样?!这两件事情是一样的吗?
答案 0 :(得分:2)
不,他们不一样。
config
表示考虑{}
(\ n)
next line
也意味着分组但不考虑下一行(\ n),所以即使你的()
中间有所有代码\n
代码行被视为一行。
答案 1 :(得分:2)
<div class="homelink portfolio-item">
<a href="http://laurahd.com/icons/">
<aside class="callout2">
</aside>
</a>
<a href="http://laurahd.com/codefu/">
<aside class="callout3">
</aside>
</a>
</div>
循环定义
Expr1 :: ='for'('('Enumerators')'|'{'Enumerators'}') {nl} ['yield'] Expr
枚举器:: =生成器{semi Generator}
Generator :: = Pattern1'&lt; - 'Expr {[semi] Guard | semi Pattern1'='Expr}
Guard :: ='if'PostfixExpr
除了换行符之外,它们是相同的。
对于scala scala spec中花括号的情况,您可以找到:
以下地方接受多个换行令牌(请注意,在每种情况下,用分号代替换行符都是非法的):
- 在条件表达式或while循环的条件与下一个表达式
之间- 在for-comprehension的枚举数和下一个表达式之间,
- 在类型定义或声明中的初始类型关键字之后。