考慮以下2個對象爲什麼在沒有空括號的情況下定義Scala函數不會像函數那樣工作?
object TestObj1 {
def testMethod = "Some text"
}
object TestObj2 {
def testMethod() = "Some text"
}
,如果我直接調用這些方法,他們做什麼,我希望
scala> TestObj1.testMethod
res1: String = Some text
scala> TestObj2.testMethod
res2: String = Some text
但是現在如果我們定義下面的函數
,並嘗試要調用它,沒有()定義的方法不被接受。
scala> functionTakingFunction(TestObj1.testMethod)
<console>:10: error: type mismatch;
found : String
required:() => String
functionTakingFunction(TestObj1.testMethod)
^
scala> functionTakingFunction(TestObj2.testMethod)
Call returns: Some text
我還注意到,您不能使用括號,因爲它已經是一個字符串調用TestObj1.testMethod。但是什麼導致了這種行爲?
只需指出,@ om-nom-nom答案是正確的(它可以完成任務),但類型不匹配的原因是「def foo」和「def foo()」是兩個不同的哺乳動物斯卡拉...雖然它們都是** 0-arity **方法,但空參數列表和沒有參數列表的結果不一樣,請參閱http://stackoverflow.com/questions/7409502/what-is-the-difference-between-def-foo -and-DEF-foo的功能於階。 –
那些不是功能,它們是方法。 –
@JörgWMittag我的命名不好。但是如果它們是功能它會有所作爲嗎? functionTakingFunction不知道你是傳遞一個函數還是一個方法,對吧? –