在下面的示例中,变量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() )
^