以下の例では、変数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() )
^