Scala 中不帶括號的函數與帶括號函數的差異

    在Scala中, 定義一個不帶任何參數函數能夠這樣寫:ide

def name = "Archer"

調用不帶括號的函數時不能帶括號. 好比調用剛纔定義的函數name,只能寫name, 不能寫name(), 除非函數name定義時加上括號:

def name() = "Archer"

只有在定義帶有參數的函數時,括號纔是必須的函數

def sum(x: Int, y: Int) = x + y

    Scala引入不帶括號的函數定義方式有什麼用意呢? 我想主要是方便把一個函數看成變量來處理. 在Scala中, 子類能夠經過override val 的方式覆蓋父類或特質中同名的def , 例如:scala

class Father{
   def name = "Archer"
}

class Child{
   override val name = "Jack"
}
Scala做者建議,若是一個函數在邏輯上表達一種屬性的返回值,那麼在定義函數時儘可能使用不帶括號的寫法,由於這樣看上去更像一個類的屬性,而不像一個方法。因爲不帶括號的函數比帶括號的函數在使用上更嚴格,所以未來要把一個帶括號的函數定義改成不帶括號的函數定義就比較麻煩——須要先將全部帶括號的函數調用,好比name(), 通通改成不帶括號的。
相關文章
相關標籤/搜索