引用“在 Scala 中编程”:
//Code snippet 1:
def grep(pattern: String) =
for (
file <- filesHere
if file.getName.endsWith(".scala");
line <- fileLines(file)
if line.trim.matches(pattern)
) println(file +": "+ line.trim)
//Code snippet 2
def grep(pattern: String) =
for {
file <- filesHere
if file.getName.endsWith(".scala")
line <- fileLines(file)
trimmed = line.trim /*********Question is about this line*********/
if trimmed.matches(pattern)
} println(file +": "+ trimmed)
引入的动机trimmed
如下:
请注意,前面的代码重复了表达式 line.trim。这是一个重要的计算,因此您可能只想计算一次。
我在这种情况下看到了一些声明,这些变量是多余的,因为编译器将通过缓存或自行引入这样的变量来处理重复的函数调用,因此用户不应该为此烦恼。这是正确的还是我应该自己引入这样一个变量?(Java 在这方面与 Scala 有什么不同吗?因为我看到了关于 Java 的声明,而不是 Scala)。