如何复制动态绑定函数的“普通”调用语法?

在下面的示例中,变量 fn2_class 表示要从 lua 脚本中加载的函数,因此需要 var 定义;在编译时不知道实际的函数是什么。变量 fn1_class 表示相同想法的静态绑定版本。因此,fn1_classfn2_class 之间的唯一区别在于前者定义为值,后者定义为变量。

方法 getFunction 表示如何加载 lua 函数。真正的代码包括对 luaj 库的调用以生成函数。

根据此上下文重新提出问题:如何定义一个变量 fn3_class,它是动态绑定的,并具有与示例中的值 fn1_class 相同的调用语法?

这个问题涉及到 scala-2.10 或更高版本。这种代码在 scala-2.9 中编译和执行。

示例代码说明问题:

object Class {
    // 静态绑定
    val fn1_class: (String*) => String = getFunction()
    // 动态绑定
    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() )
                              ^
点赞