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

Lua 數據類型判斷與八大基本類型詳解

     編輯:更多程式設計知識

Lua 是動態強類型語言,**值有類型,變量無類型**。type() 是判斷值類型的唯一標準函數,返回類型名稱字符串。本文詳細列舉 Lua 八大基本類型特性與判斷用法。

type() 函數


a = type(X)      -- a = "nil"  (若 X 未定義)
b = type(a)      -- b = "string"  (type() 返回值永遠是字符串)
a = type(nil)    -- a = "nil"
  • 返回值:"nil"、"number"、"string"、"boolean"、"table"、"function"、"userdata"、"thread"。
  • 無 "int"、"float" 區分(Lua 5.3+ 內部區分整數/浮點,type() 仍返回 "number",用 math.type() 區分)。

Lua 八大基本類型

  1. nil:表示「無值」,條件判斷為假。全局變量未賦值即為 nil。可將變量賦 nil 刪除它。類比 C NULL 但**非指針**。
  2. boolean:只有 true 和 false。**只有 nil 和 false 為假**,0、空字符串、空表均為真。
  3. number:內部用 double(雙精度浮點)表示。Lua 5.3+ 引入 64 位整數子類型,但 type() 統一返回 "number"。
  4. string:不可變字節序列,**總以 \0 結尾但可包含任意字節(含 \0)**,因此是 C 字符串的超集。支持多行長字符串 [[...]]。
  5. function:Lua 核心概念之一。支持閉包、尾調用、多返回值、可變參數。不簡單等同於 C 函數指針。
  6. table:異構關聯數組,**Lua 唯一的數據結構**可作數組、字典、集合、對象、模塊、包。鍵可為除 nil 外任意值。
  7. userdata:宿主(C/C++)創建的任意內存塊。腳本層只能**使用**、傳遞、存儲,**不能定義**新類型。用於綁定 C 結構體、文件句柄等。
  8. thread:協程,非操作系統搶佔式線程。支持 coroutine.create/resume/yield 協作式調度。

類型判斷最佳實踐


-- ❌ 錯誤:比較 table 引用
if my_table == {} then ... end  -- 永遠 false,{} 創建新表

-- ✅ 正確:判斷 table 是否為空
if next(my_table) == nil then ... end  -- 標準寫法

-- ✅ 判斷數字(含字符串數字)
local n = tonumber(val)
if n then ... end

-- ✅ 判斷函數
if type(callback) == "function" then callback() end

總結

type() 返回字符串是類型檢查的基石。理解八大類型語義——特別是 **nil/boolean 假值規則**、**string 字節序列特性**、**table 唯一結構地位**、**function 第一類值**、**thread 協程非線程**——是編寫正確、高效、可嵌入 Lua 代碼的前提。

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