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

Lua 判斷變量類型與數字轉換完全指南

     編輯:更多程式設計知識

Lua 是動態類型語言,變量無類型,值有類型。準確判斷值類型、安全轉換數字是編寫健壯 Lua 代碼的基礎。本文系統整理 type()、tonumber()、tostring() 等核心 API 用法與陷阱。

1. 判斷值類型:type()

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"。

2. 判斷字符串能否轉數字:tonumber()

local n = tonumber(str)
if n then
    -- n 是轉換後的數字
else
    -- 轉換失敗,n == nil
end
  • tonumber("222") → 222
  • tonumber("222a") → nil
  • tonumber("0xFF") → 255(支持十六進制)
  • tonumber(" 123 ") → 123(自動去除空白)

3. 判斷並提供默認值:短路賦值

local val = tonumber(input) or 0  -- 轉失敗用 0
local val = tonumber(input) or 1  -- 轉失敗用 1
  • tonumber 失敗返回 nil(假值),or 短路返回後備值。
  • 常用於配置讀取、用戶輸入處理。

4. 類型轉換陷阱

代碼結果說明
type("12")"string"字面量字符串
tonumber("12")12 (number)成功轉換
tostring(12)"12"數字轉字符串
type(tonumber("abc"))"nil"轉失敗返回 nil

5. Lua 八大基本類型速查

  1. nil:無值,條件判斷為假,類比 C NULL 但非指針。
  2. boolean:true/false,只有 nil 和 false 為假。
  3. number:雙精度浮點數(Lua 5.3+ 另加整數子類型)。
  4. string:不可變字節序列,可包含任意字節(含 \0),非 C 風格以 \0 結尾。
  5. table:異構關聯數組,Lua 唯一數據結構,可作數組/字典/對象。
  6. function:第一類值,支持閉包、尾調用、協程。
  7. userdata:C 代碼創建的任意內存塊,腳本層只能使用不能定義。
  8. thread:協程,非操作系統搶佔式線程。

6. 實用模式:安全獲取數字配置


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/函數**,比較的是引用地址。
  • 理解八大類型特性,是掌握 Lua 元表、元方法、C API 交互的前提。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved