0
引用 '編程Scala中':是否需要在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)。
謝謝你,這是相當全面的答案。我是一個Scala新手,但我很清楚,很清楚。 – tkroman