我正在嘗試撰寫一些以函式形式輸入的東西,例如“f(x) = 2*x 5”,并將其計算為正規方程。
我目前擁有的是:
print("give any function") --vague as placeholder
x=50
str=string.gsub(io.read(), "x", tostring(x))
print(str*1)
當您在輸入中有 x 變數時,它作業正常,像以前一樣用先前設定的 x 變數替換它。發生的情況是,當您放入諸如“1 1”之類的內容時,它不接受它。
有沒有辦法從諸如“1 1”之類的東西中獲取輸入以計算為 2,而不僅僅是它給出的字串?
我在這里主要問的是:“數字運算子號”格式下的任何用戶輸入只能作為字串讀取,而不是可計算的方程。任何解決方法?
uj5u.com熱心網友回復:
您可以使用一些更詳細的 gsub,然后將函式加載為 lua 代碼。由于格式1 1不是真正的“函式”格式,我們需要為函式只是一個操作的情況添加一些額外的處理
function evaluateFunction(funcStr, x)
funcStr = "return " .. funcStr
funcStr, replaced = funcStr:gsub("f%(", "function(")
funcStr = funcStr:gsub("=", "return")
if replaced ~= 0 then
funcStr = funcStr .. " end"
end
print(funcStr)
local func = load(funcStr)()
if type(func) == "function" then
print(func(x))
else
print(func)
end
end
evaluateFunction("f(x) = 2*x 5", 50)
evaluateFunction("f() = 2*5")
evaluateFunction("1 1")
輸出:
回傳函式(x) 回傳 2*x 5 結束
105
return function() 回傳 2*5 結束
10
回傳 1 1
2
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329494.html
上一篇:Laravel8外鍵遷移表
