在Scala的for循环中,花括号和圆括号有什么区别?

7
这是我学习Scala的第一天(使用“Beginning Scala”书籍)。当我阅读Scala中的for循环时,有两个例子:
val books = List("Beginning Scala", "Beginning Groovy", "Beginning Java", "Scala in easy steps", "Scala in 24 hours")

[1]

for (book<-books if book.contains("Scala")) println(book)

[2]

for { book <- books
  bookVal = book.toUpperCase()
}
println(bookVal)

我感到困惑的是:
在 [1] 中,for 循环使用括号 "()" 包装循环控制块,在 [2] 中则使用花括号 "{}"。我想知道这是否只是不同的语法,但实际上它们是否表示了不同的含义?
谢谢。

1
相关问题:https://dev59.com/Y2855IYBdhLWcg3wXTAI - Kulu Limpa
@KuluLimpa 谢谢,这很有帮助,但对我来说太复杂了,难以理解。 - Kuan
1个回答

4

花括号通常用于多行表达式或包含其他表达式的表达式。如果您能够(或希望)使用分号在单行中编写,则可以使用括号。每个for循环都可以使用花括号编写,但是使用括号会减少。

如果遇到其他情况,花括号使您可以使用更简单的语法编写部分函数或模式匹配。

如果您在REPL中编写以下代码:

for (
    i <- List(1,2,3)
    y = i * i
) yield y

它不能成功编译,例如:


谢谢,我尝试在“()”中输入多行代码,它可以工作。我不知道“{}”和“()”之间的确切区别,为什么它们几乎在任何地方都能使用?我的理解肯定有很多错误,你能给我一些只能在FOR中使用“()”或反之的例子吗? - Kuan
谢谢,我想我明白了(不确定,但是猜测是这样)。我会尝试更多。顺便问一下,什么样的操作可以被视为表达式? - Kuan
@Kuan 在Scala中,每个返回值的代码片段都是表达式。 - Sergii Lagutin
谢谢。我想我会尝试更多的例子来让自己更加熟悉这个概念。 - Kuan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接