2014-01-16 138 views
3
爲int

我試圖讓多個數字的字符串到單個int 這樣的:轉換計算字符串在Lua

x="5+5" --amount of numbers is not constant 
y=tonumber(x) 
print(y) 

這樣做的結果是nil,而應該是10(INT) 。我可以解決這個問題的唯一方法是首先搜索所有"+""-"string.find(),然後將其切割爲所有必要部分,然後從那裏只需tonumber()。對於這樣一個簡單的問題,編寫至少一百行代碼感覺很愚蠢。

回答

3

tonumber只能用於實數而不是算術表達式的字符串。

您可以加載該字符串並運行它:

x = "5 + 5" 
func = assert(load("return " .. x)) 
y = func() 
print(y) 

在Lua中5.1,使用loadstring代替load

+3

請確保您信任源代碼;這可以用來運行任意代碼! –

+0

'setfenv(func,{})'應該有助於最小化運行惡意代碼的風險,不是嗎?即使沒有任何功能,代碼是否仍然有可能造成傷害? –

+2

評估表達式的更好環境是數學庫,以便用戶可以寫'cos(x)'而不是'math.cos(x)'。 – lhf