LSLをLuaトランスレータに書いていますが、増分と減分の演算子を実装するのにさまざまな問題があります。 LSLは普通のCのような構文(x ++、x--、++ x、 - x)を使っていますが、Luaはそうではありません。大量の入力を避けるために、私はこれらの種類の演算子を「クリエイティブ」と呼びます。以下のコードでは、式の他の部分を表すために "..."を使用します。Luaへの翻訳時にポスト/プリインクリメント/デクリメントを実装する
... x += 1 ...
coz Luaは簡単な割り当てしかありません。
... x = x + 1 ...
これは文であり、式では文を使用できません。 LSLは表現のクリエーションを使用できます。
function preIncrement(x) x = x + 1; return x; end
... preIncrement(x) ...
それは式の正しい値を提供しているが、Luaは番号の値渡しなので、元の変数が変更されません。変数を実際に変更することができれば、すべてが有効です。環境に迷惑をかけるようなことはあまり良いことではないかもしれません。私は次にそれを調べると思います。翻訳者は範囲の詳細を出力できます。
... x = preIncrement(x) ...
文句を言わない仕事を「それは文の」理由 - 上記の関数が存在すると仮定すると、
。
他の解決策は本当に乱雑になり始めます。ワームの全体の缶になっ
while (doOneThing(x++))
{
doOtherThing(x);
}
-
x = preIncrement(x)
... x ...
は、元LSLコードはこのようなものである場合を除いて、正常に動作します。関数内のテーブルを使用する -
function preIncrement(x) x[1] = x[1] + 1; return x[1]; end
temp = {x}
... preincrement(temp) ...
x = temp[1]
さらに扱いにくく、同じ問題があります。
単純な翻訳を行う代わりに、周囲のコードを実際に分析しなければならないかもしれないように見えるようになり始めました。誰も簡単なアイデアを持っていますか?
_G ["variable"]はグローバルに有効です。テーブル内の変数は問題ではなく、LSLにはそのようなことはありません。それはまだ地元の人を去らせる。関数内で定義された関数は、上位レベルのローカルにアクセスできるため、作業が楽になる可能性があります。 –