考虑以下 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,因为它已经是一个字符串。但是是什么导致了这种行为?