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