Lua 是動態類型語言,變量無類型,值有類型。準確判斷值類型、安全轉換數字是編寫健壯 Lua 代碼的基礎。本文系統整理 type()、tonumber()、tostring() 等核心 API 用法與陷阱。
local t = type(x)
if t == "number" then
-- 是數字
elseif t == "string" then
-- 是字符串
end
type() 返回**字符串**:"nil"、"number"、"string"、"boolean"、"table"、"function"、"thread"、"userdata"。type(type(x)) 永遠是 "string"。local n = tonumber(str)
if n then
-- n 是轉換後的數字
else
-- 轉換失敗,n == nil
end
tonumber("222") → 222tonumber("222a") → niltonumber("0xFF") → 255(支持十六進制)tonumber(" 123 ") → 123(自動去除空白)local val = tonumber(input) or 0 -- 轉失敗用 0
local val = tonumber(input) or 1 -- 轉失敗用 1
tonumber 失敗返回 nil(假值),or 短路返回後備值。| 代碼 | 結果 | 說明 |
|---|---|---|
type("12") | "string" | 字面量字符串 |
tonumber("12") | 12 (number) | 成功轉換 |
tostring(12) | "12" | 數字轉字符串 |
type(tonumber("abc")) | "nil" | 轉失敗返回 nil |
true/false,只有 nil 和 false 為假。
function get_number_config(tbl, key, default)
local raw = tbl[key]
if raw == nil then return default end
local num = tonumber(raw)
return num ~= nil and num or default
end
-- 用法
local config = { timeout = "30", retries = "abc" }
local timeout = get_number_config(config, "timeout", 10) -- 30
local retries = get_number_config(config, "retries", 3) -- 3 (默認值)
type()**,返回字符串常量。tonumber()**,失敗返回 nil,配合 or 提供默認值。== 比較 table/函數**,比較的是引用地址。