【发布时间】:2014-10-06 00:44:24
【问题描述】:
这个问题与我的另一个问题密切相关(可能会导致我解决那个问题),但绝对不同。
how to allow passing in a => AnyRef function and call that function
我一直在尝试创建不同的函数,坦率地说,我在创建 => 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 之前调用该函数(这是在我的另一个线程中,是一个单独的问题)。
关于这里发生了什么的任何想法?
谢谢, 院长
【问题讨论】: