2016-11-07 52 views
0

嗨我想運行我的代碼,我加倍檢查了一切。它應該工作,我的意思是IDE沒有給出任何警告。但是,當編譯我收到此錯誤_必須遵循方法;不能跟隨()=>布爾

Error:(20, 40) _ must follow method; cannot follow() => Boolean 
     properties += new Property(propName, formula _) 

這裏是導致這種錯誤

def property(propName: String)(formula:() => Boolean) { 
     properties += new Property(propName, formula _) 
    } 

這是屬性類

class Property(val name: String, val func:() => Boolean) 

那是什麼,我的東西代碼的一部分在這裏失蹤?

回答

4

這裏不需要下劃線。只有當您想通過eta-expansion將方法轉換爲函數時,才需要下劃線。這裏沒有必要,因爲formula已經是() => Boolean類型的函數,Property類正在尋找類型。

def property(propName: String)(formula:() => Boolean) { 
    properties += new Property(propName, formula) 
} 
+0

所以這就是爲什麼它不會給出錯誤,當我使'def屬性(propName:字符串)(公式:=>布爾)'? –

+0

'=>布爾'不完全相同'功能1 [布爾]'。你會注意到,如果你放棄'_',你*會*出錯。這是[另一個](http://stackoverflow.com/a/8001065/1374461)在Scala中使用'_'。 –

3

就像警告說的那樣。 _必須遵循一種方法將其變成函數。 formula已經是一個功能。所以你可以通過這樣的:

properties += new Property(propName, formula) 
相關問題