1

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

0 回答 0