首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Lua 執行字串程式碼:loadstring 實現動態計算與函數定義

     編輯:更多程式設計知識

Lua 提供 loadstring (5.1) / load (5.2+) 將字串編譯為函數,類似 JavaScript eval 但更安全(回傳函數而非直接執行)。本文示範動態計算數學運算式與定義可呼叫函數兩種用法。

動態計算運算式


local param = "7*100"
local func = loadstring("return " .. param)  -- 加上 return 取得結果
local result = func()
print(result)  -- 700

定義並呼叫函數


-- 直接執行
loadstring("print('test')")()

-- 定義函數變數
local funcStr = "print('hello from string')"
local func = loadstring(funcStr)
func()  -- 輸出: hello from string

進階:沙箱環境

為安全起見,可設定環境表限制可用全域變數:


local sandbox = {
    print = print,
    math = {abs=math.abs, sqrt=math.sqrt},
    _G = sandbox  -- 防止存取真實 _G
}
local func = loadstring(untrusted_code)
setfenv(func, sandbox)  -- Lua 5.1
-- Lua 5.2+: load(untrusted_code, nil, 't', sandbox)
func()

應用場景

  • 使用者自訂腳本/規則引擎。
  • 從伺服器下發可執行程式碼熱更新。
  • 動態產生程式碼(程式碼生成器)。

注意事項

  1. loadstring 編譯失敗回傳 nil, error_msg,需檢查錯誤。
  2. 頻繁編譯影響效能,熱路徑應快取編譯後函數。
  3. 不可信程式碼必須沙箱隔離,防止惡意操作系統資源。
  4. Lua 5.2+ 棄用 loadstring,改用 load。

善用 loadstring 可構建高度動態的 Lua 應用架構。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved