有沒有辦法在變量中將「1 + 2 * 3」轉換爲1 + 2 * 3?數字並不重要,我只是想弄清楚如何讓Lua將一個字符串計算爲一個數字。 tonumber()不適用於此。Corona with Lua - 將文本轉換爲公式
2
A
回答
2
如果您只需要簡單的操作,這樣的事情可能工作:
function calculator(expression)
expression = expression:gsub("%s+", "")
while true do
local head, op1, op, op2, tail = expression:match("(.-)(%d+)([%*/])(%d+)(.*)")
if not op then break end
expression = head .. tostring(op == '*' and op1 * op2 or op1/op2) .. tail
end
while true do
local head, op1, op, op2, tail = expression:match("(.-)(%d+)([%+%-])(%d+)(.*)")
if not op then break end
expression = head .. tostring(op == '+' and op1 + op2 or op1 - op2) .. tail
end
return tonumber(expression)
end
function calculator(expression)
expression = expression:gsub("%s+","")
local n
repeat
expression, n = expression:gsub("(%d+)([%*/])(%d+)",
function(op1,op,op2) return tostring(op == '*' and op1 * op2 or op1/op2) end, 1)
until n == 0
repeat
expression, n = expression:gsub("(%d+)([%+%-])(%d+)",
function(op1,op,op2) return tostring(op == '+' and op1 + op2 or op1 - op2) end, 1)
until n == 0
return tonumber(expression)
end
print(calculator('1 + 2') == 3)
print(calculator('1+2+3') == 6)
print(calculator('1+2-3') == 0)
print(calculator('1+2*3') == 7)
print(calculator('1+2*3/6') == 2)
print(calculator('1+4/2') == 3)
print(calculator('1+4*2/4/2') == 2)
print(calculator('a+b') == nil)
有兩個calculator
函數做同樣的事情稍微不同的方式:他們崩潰的表達,直到只有一個單一的數字。變成"1+6/6"
,然後變成"1+1"
,最後變成"2"
,它作爲數字返回。
+1
這很好。謝謝! –
+0
我在第二個實現(',1'到'gsub')上添加了一個調整來解決分割或減法操作序列的問題(以強制執行從左到右的處理)。 –
相關問題
- 1. 將文字文本轉換爲公式
- 2. 如何將公式轉換爲文本?
- 3. 將excel公式轉換爲PHP腳本
- 4. 將SQL腳本轉換爲Lotus公式
- 5. 將公式轉換爲VBA
- 6. 將公式轉換爲PHP
- 7. 使用excel將單元格的公式轉換爲文本vba
- 8. 將Java轉換爲Lua
- 9. 將Lua轉換爲C#
- 10. Excel。將文本轉換爲值計算值的公式
- 11. 將公式轉換爲文本停止Excel csv
- 12. Excel - 將公式中的文本範圍轉換爲日期
- 13. Excel VBA:將公式值轉換爲文本
- 14. 如何將R公式轉換爲文本?
- 15. Lua - 將3gp文件轉換爲raw(或wav)?
- 16. 將公式轉換成vba
- 17. Lua:將PCRE轉換成Lua
- 18. Corona SDK如何工作? Lua是否轉換爲Objective C?
- 19. 如何將lua腳本轉換爲lua字節碼?
- 20. Corona未將json轉換爲表格
- 21. 如何將Corona setReferencePoint轉換爲Anchor?
- 22. 將組合公式轉換爲VBA
- 23. 將Excel公式轉換爲SQL案例
- 24. Excel - 將if條件轉換爲公式
- 25. 將Excel公式轉換爲T-SQL
- 26. vba:將範圍轉換爲公式
- 27. 如何將MathJax公式轉換爲img
- 28. 將字符串轉換爲公式
- 29. 將excel公式轉換爲php
- 30. 將int轉換爲char C公式
看來你不能使用'loadstring'。純Lua中的解決方案將取決於您打算使用的表達式的複雜程度。 – lhf
如果您可以使用LPeg,請嘗試http://rosettacode.org/wiki/Arithmetic_evaluation#Lua。 – lhf
昨天晚上我開始閱讀LPeg,但沒有得到嘗試的機會。謝謝你的評論。 –