我正在給Lua翻譯器寫一個LSL,並且在執行遞增和遞減操作符時遇到各種麻煩。 LSL具有使用通常的C語法(x ++,x--,++ x,--x)的這種東西,但Lua不會。爲了避免大量的打字,我將這些操作符稱爲「拼接」。在下面的代碼中,我將使用「...」來表示表達式的其他部分。當翻譯成Lua時實現post/pre increment/decrement
... x += 1 ...
不會工作,因爲Lua只有簡單的任務。
... x = x + 1 ...
不會工作因爲這是一個聲明,並且Lua不能在表達式中使用語句。 LSL可以在表達式中使用crements。
function preIncrement(x) x = x + 1; return x; end
... preIncrement(x) ...
雖然它提供在表達正確的值,Lua是通過對數字值傳遞,所以原來的變量不被改變。如果我能得到這個實際改變的變量,那麼一切都很好。混淆環境可能不是一個好主意,不知道範圍x是什麼。我想我會在下面進行調查。翻譯者可以輸出範圍細節。
假設上述功能的存在 -
... x = preIncrement(x) ...
對於慣於工作「這是一個聲明」的原因。
其他解決方案開始變得非常混亂。
x = preIncrement(x)
... x ...
工作正常,但在原來的LSL代碼是這樣的 -
while (doOneThing(x++))
{
doOtherThing(x);
}
,這已經成爲蠕蟲病毒的一個整體可以。在功能中使用表格 -
function preIncrement(x) x[1] = x[1] + 1; return x[1]; end
temp = {x}
... preincrement(temp) ...
x = temp[1]
更加混亂,並且具有相同的問題。
開始看起來像我可能不得不實際分析周圍的代碼,而不是做簡單的翻譯來理清實現任何給定的內容的正確方法。任何人有任何簡單的想法?
_G [「variable」]應該適用於全局變量。表格內的變量不是問題,LSL沒有這樣的事情。這仍然留給當地人。函數內部定義的函數可以訪問上層的本地人,這樣可以使事情變得更容易。 – 2012-02-03 07:44:45