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

时间:2015-01-18 15:52:43

标签: scala variadic-functions scala-2.10 dynamic-binding luaj

在下面的示例中,变量fn2_class表示要从lua脚本加载的函数,因此var定义是必需的;在编译时不知道实际的功能是什么。变量fn1_class表示同一想法的静态绑定版本。 fn1_classfn2_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() )
                              ^

0 个答案:

没有答案