2012-02-28 16 views
2

動的変数名を読み取る可能性があるかどうか知りたいですか? 私のスクリプトに変数を渡すプログラマは、単に "in1、in2、in3"などと呼んでいるからです。 ループを作成する方法はあります。Luaで動的変数名を読み取る

これまでに試したことはありますが、エラーが出るだけです。

for i=1,19,2 do 
myvar[i] = ["in"..i] 
end 

私はLuaのに非常に新しいんだけど、私は解決策はそれは難しいことではありません願っています:D

編集: ああ、私はあなたにいくつかのより多くの情報を提供しようとするでしょう。 "Main"プログラムはLuaで書かれておらず、単に "in1 ..."変数を設定するだけです。これはロボットプログラミングのソフトウェアの一種であり、たくさんのfunktionsが組み込まれています。それだけで、他の変数名や配列を使うことはできません。したがって、Luaに関連する関数やその他のものではありません。 ここに少しあります。http://www.bilderload.com/daten/unbenanntFAQET.jpg Luaスクリプトは最初の入力を単に通過します。

+0

「単にエラーが出る」というのではなく、正確なエラーが表示された場合に役立ちます。 – kikito

+0

申し訳ありませんが、ここにあります: "2行目:予期しないシンボル '['" – user1238052

+0

これらの変数をテーブルにエクスポートできませんか?それは問題を大幅に簡素化するでしょう。 – jpjacobs

答えて

1

これらの「動的変数」を吐き出すコードを書いた人は誰も良い仕事をしませんでした。それらを持つことは悪い習慣であり、データの損失、グローバルネームスペースの混乱を招く可能性があります。

変更できる場合は、結果を含むテーブルを出力するほうがずっと良いでしょう。

つまり、あなたはあなたのソリューションを遠く離れているわけではありませんが、["in"..i]は有効なLua構文ではありません。あなたは何も索引付けしていません。これらの変数がグローバルである場合、コードは次のようになります。

for i=1,19,2 do 
    myvar[i] = _G["in"..i] 
end 

これは、変数に含まれる値をグローバルテーブルから読み取ります。

+0

うーん、私はそれを試みたが、変数はグローバルなものではないようだ。私はこの小さなコードを自分で書きましたが、私は今までルアと何もしていません。私はそれを必要とするだけでいくつかのロジックelemetsを簡素化する。 – user1238052

5

「動的変数名」の意味によって異なります。

ローカル変数の名前が存在しません。ローカル変数は、関数パラメータまたはlocalキーワードで宣言された変数です。ローカル変数はLuaスタックへのオフセットにコンパイルされるので、その名前は存在しません。名前を付けるために何かを索引付けすることはできません。

グローバル変数はグローバルテーブルのメンバーです。そのため、グローバル変数を設定するには、これらの方法は等価です。

globalVar = 4 
_G.globalVar = 4 
_G["globalVar"] = 4 

私のスクリプトに変数を渡すプログラムの開発は、単に「IN1、IN2、IN3」

など、それらを呼び出すので、あなたのスクリプトに変数を渡すプログラムでは、名前を付けることはできません。変数は値のプレースホルダにすぎません。その価値の所有権はありません。あなたの関数が引数を取得すると、 関数がそれらの名前を取得します。

あなたはあなたのプログラムの構造についてあまり言わなかったので、私は本当に良い助言を与えることはできません。しかし、パラメータとしていくつかの値を取り込み、それらを入力としてアクセスしたい場合は、2つの方法で行うことができます。あなたは、パラメータとして値を含むテーブルを取ることができ、またはあなたは可変引数を取ることができます:

function MyFunc1(theArgs) 
    for i, arg in ipairs(theArgs) do 
    --Do something with arg. 
    end 
end 

function MyFunc2(...) 
    for i, arg in ipairs({...}) do 
    --Do something with arg. 
    end 
end 

MyFunc1 {2, 44, 22} --Can be called with no() because it takes a single value as an expression. The table. 
MyFunc2(2, 44, 22) 
+0

ああ、もう少し詳しい情報をお渡しします。 "Main"プログラムはLuaで書かれておらず、単に "in1 ..."変数を設定するだけです。これはロボットプログラミングのソフトウェアの一種であり、たくさんのfunktionsが組み込まれています。それだけで、他の変数名や配列を使うことはできません。だから、それはLuaに関連する関数や他のものではありません。 – user1238052

+0

@ user1238052:まず、あなたの質問にこれを入れてください。 「編集」ボタンを使用します。次に、*どのようにそれらの変数を設定しますか?それらを設定するために使用しているコードを表示し、あなたのLua関数がどのように呼び出されるかを示してください。 –

+0

それは問題ですが、他のLuaコードはありません!私は状況を明確にするために少しスクリーンショットを作った:[リンク](http://www.bilderload.com/daten/unbenanntFAQET.jpg) – user1238052

1

この

MYVAR = {IN1、IN2、IN3、IN4、IN5、IN6、IN7を試してみてください、 IN8、IN9、IN10、IN11、IN12 、IN13、IN14、IN15、IN16、IN17、IN18、IN19}

変数はグローバル変数として渡された場合、またはこの

myvar = {...} 

変数が引数としてスクリプトに渡される場合。

関連する問題