次の2つのオブジェクトを検討してください
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
しかし今、次の関数を定義すると
def functionTakingFunction(callback: () => String) {
println("Call returns: " + callback())
}
() なしで定義されたメソッドは受け入れられません。
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 は既に文字列であるため、括弧を使用して呼び出すことはできないことにも気付きました。しかし、この動作の原因は何ですか?