2014-01-13 28 views
0
scala> def judge(func:()=> Boolean) { 
    | val result = func() 
    | println(result) 
    | } 
judge: (func:() => Boolean)Unit 

scala> def compare = { 6 > 4 } 
compare: Boolean 

scala> judge(compare) 
<console>:10: error: type mismatch; 
found : Boolean 
required:() => Boolean 
       judge(compare) 
        ^

scala> def compare() = { 6 > 4 } 
compare:()Boolean 

scala> judge(compare) 
true 

什麼def compare() = { 6 > 4 }手段? 兩個'比較'功能有什麼區別? 我很困惑。Scala中的這個定義是什麼意思?

謝謝。

回答

2
def compare = { 6 > 4 } 

意味着創建函數的比較圖6和4,並返回一個布爾值(真)。

即所謂0-元數方法。 0-元數的

甲Scala的方法可以用或不用括號()定義。這是用於用信號,該方法具有某種副作用的用戶(如打印出到std出或破壞數據)。

如果您在定義中的括號您可以選擇忽略它們,當你調用該方法。

此外,見Programming in Scala

這些參數的方法是很常見的斯卡拉。相比之下,用空括號定義的方法(如def height():Int)稱爲空白方法。推薦的約定是在沒有參數的情況下使用無參數方法,並且方法僅通過讀取包含對象的字段來訪問可變狀態(特別是,它不會更改可變狀態)。

此約定支持統一訪問原則[...]

總之,鼓勵風格斯卡拉定義不帶參數的,沒有副作用參數的方法,即方法,使關閉空括號。另一方面,你永遠不應該定義一個沒有括號的副作用的方法,因爲那樣調用該方法看起來就像是一個字段選擇。

有關此主題的更多信息,你可以在這裏找到:

+0

我讀過的Scala編程和你的答案,我明白了。非常感謝你。 – user3190192

0

函數總是返回true。

+0

下一次你可以說'一個函數'更簡潔, –

相關問題