2016-05-30 2 views
1

私はルアスクリプトを作成していますが、値の保存はサポートしていません。したがってfunは、プログラムの状態を復元した後、有効ではありません機能:一方の単純な関数でルアは一定の値に定数を設定します

gen=function(par) 
    local a=par 
    return function() print(a) end 
    end 
fun=gen(2) 

を閉鎖せずにgenが保存され、正常にロードされますように。 funに似た関数をたくさん作成したいのですが、上記のパラメータaの値が異なります。プログラムに相当するもの:

fun1=function() 
    local a=1 
    print(a) 
end 
fun2=function() 
    local a=2 
    print(a) 
end 
--and so on 

可能性はありますか?

答えて

1

あなたは自分の関数として振る舞う(しかし、それはテーブルなので、それがうまくいけば正しく復元されなければならない)テーブルを作成することができます。

gen = function(par) 
    return setmetatable({a = par}, { 
      __call = function(self) 
       print(self.a) 
      end 
     }) 
end 

fun = gen(1) -- Note: fun is a table, but can be called like a function. 
fun() 

あなたは、テーブル関数にパラメータを追加する必要がある場合は、あなたは、単に__callメタメソッドにパラメータを追加することによって、そうすることができます。

gen = function(par) 
    return setmetatable({a = par}, { 
      __call = function(self, something) 
       print(self.a, something) 
      end 
     }) 
end 

fun = gen(1) 
fun("foobar") -- Outputs "1 foobar" 

詳細はLua manual, section 'Metatables and Metamethods'をチェックしてください!

関連する問題