这个问题与我的另一个问题密切相关(可能会导致我解决那个问题),但绝对不同。
我一直在玩不同的函数创建,坦率地说,我在创建 => AnyRef 和 => String 类型的匿名函数时遇到了麻烦。我认为我可以创建 () => AnyRef 和 () => String 类型的函数。
示例 1 我有以下代码
def debugLazyTest2(msg: => String) : Unit = {
System.out.println(msg)
}
//and client code
val function: () => String = () => {
executed = true
"asdf"+executed+" hi there"
}
log2.debugLazyTest2(function)
但编译错误说 found: () => String 这很有意义,但随后说“required:String”而不是“required:=> String”
这里发生了什么?
示例 2 更奇怪的是,我有这段代码编译,而上面没有编译
def debugLazyTest(msg: => AnyRef) : Unit = {
System.out.println(msg.toString)
}
//and client code which compiles!!!!
val function: () => AnyRef = () => {
executed = true
"asdf"+executed+" hi there"
}
log2.debugLazyTest(function)
这段代码可以编译,尽管它不像我想要的那样工作,因为在调用 toString 之前库似乎无法调用函数(这是在我的另一个线程中,是一个单独的问题)。
关于这里发生了什么的任何想法?
谢谢,院长