在下面的示例中,该变量fn2_class
表示要从 lua 脚本加载的函数,因此var
定义是必要的;在编译时不知道实际功能是什么。该变量fn1_class
表示同一想法的静态绑定版本。fn1_class
因此,和之间的唯一区别fn2_class
是前者被定义为一个值,而后者被定义为一个变量。
该方法getFunction
表示如何加载 lua 函数。真正的代码包括调用 luaj 库来生成函数。
考虑到这个上下文重新表述这个问题:如何定义一个fn3_class
动态绑定的变量,并且与示例中的值具有相同的调用语法fn1_class
?
这个问题涉及 scala-2.10 或更高版本。这种代码在 scala-2.9 中编译和执行。
说明问题的示例代码:
object Class {
// static binding
val fn1_class: (String*) => String = getFunction()
// dynamic binding
var fn2_class: (String*) => String = null
def getFunction(): (String*) => String = {
val fn_dyn : (String*) => String = x => { x.head }
fn_dyn
}
def main(args: Array[String]): Unit = {
fn2_class = getFunction()
println( fn1_class() )
println( fn2_class() )
}
}
上面的代码在编译时会生成以下错误消息(scala-2.10)。
error: not enough arguments for method apply: (v1: String)String in trait Function1.
Unspecified value parameter v1.
println( fn2_class() )
^