lua 是一種 動態型別語言。 這意味著變數沒有型別,只有值才有型別。 語言中不存在型別定義。而所有的值本身攜帶它們自己的型別資訊。
lua 中的所有值都是一致 (first-class) 的。 這意味著所有的值都可以被放在變數裡,當作引數傳遞到另乙個函式中,並被函式作為結果返回。
lua 中有八種基本型別: nil, boolean, number, string, function, userdata, thread, and table. nil 型別只有一種值 nil ,它的主要用途用於標www.cppcns.com表識和別的任何值的差異; 通常,當需要描述乙個無意義的值時會用到它。 boolean 型別只有兩種值:false 和 true。 nil 和 false 都能導致條件為假;而另外所有的值都被當作真。 number 表示實數(雙精度浮點數)。 (編譯乙個其它內部數字型別的 lua 直譯器是件很容易的事;比如把內部數字型別改作 單精度浮點數或長整型。參見檔案 luaconf.h 。) stri程式設計客棧ng 表示一串字元的陣列。 lua 是 8-bit cleawww.cppcns.comn 的: 字串可以包含任何 8 位字元, 包括零結束符 (『\0′) (參見 2.1)。
lua 可以呼叫(和處理)用 lua 寫的函式以及用 c 寫的函式(參見 2.5.8).
userdata 型別用來將任意 c 資料儲存在 lua 變數中。 這個型別相當於一塊原生的記憶體,除了賦值和相同性判斷,lua 沒有為之預定義任何操作。 然而,通過使用 metatable (元表) ,程式設計師可以為 userdata 自定義一組操作 (參見 2.8)。 userdata 不能在 lua 中建立出來,也不能在 lua 中修改。這樣的操作只能通過 c api。 這一點保證了宿主程式完全掌管其中的資料。
thread 型別用來區別獨立的執行執行緒,它被用來實現 coroutine (協同例程)(參見 2.11)。 不要把 lua 執行緒跟作業系統的執行緒搞混。 lua 可以在所有的系統上提供對 coroutine 的支援,即使系統並不支援執行緒。
table 型別實現了乙個關聯陣列。也就是說, 陣列可以用任何東西(除了nil)做索引,而不限於數字。 table 可以以不同型別的值構成;它可以包含所有的型別的值(除 nil 外)。 table 是 lua 中唯一的一種資料結構;它可以用來描述原始的陣列、符號表、集合、 記錄、圖、樹、等等。 用於表述記錄時,lua 使用網域名稱作為索引。 語言本身採用一種語法糖,支援以 a.name 的形式表示 a["name"]。 有很多形式用於在 lua 中建立乙個 table (參見 2.5.7)。
跟索引一樣, table 每個域中的值也可以是任何型別(除 nil外)。 特別的,因為函式本身也是值,所以 table 的域中也可以放函式。 這樣 table 中就可以有一些 methods 了 (參見see 2.5.9)。
table, function ,thread ,和 (full) userdata 這些型別的值是所謂的物件: 變數本身並不會真正的存放它們的值,而只是放了乙個對物件的引用。 賦值,引數傳遞,函式返回,都是對這些物件的引用進行操作; 這些操作不會做暗地裡做任何性質的拷程式設計客棧貝。
庫函式 type 可以返回乙個描述給定值的型別的字串。
lua 提供執行時字串到數字的自動轉換。 任何對字串的數**算操作都會嘗試用一般的轉程式設計客棧換規則把這個字串轉換成乙個數字。 相反,無論何時,乙個數字需要作為字串來使用時,數字都會以合理的格式轉換為字串。 需要完全控制数字怎樣轉換為字串,可以使用字串庫中的 format 函式 (參見 string.format)。
本文標題: lua教程(三):值與型別介紹
本文位址:
LUA型別與值
lua是一種動態型別語言,語言中沒有型別定義的語法,每個值都攜帶有自身的型別資訊。lua中有8個基礎型別 nil 空 boolean 布林值 number 數字 string 字串 table 表 function 函式 userdata 自定義型別 和thread 執行緒 用type函式可以返回其...
LUA教程型別和值 6
lua是動態型別語言,變數不要型別定義。lua中有8個基本型別分別為 nil boolean number string userdata function thread和table。函式type可以測試給定變數或者值的型別。print type hello world string print t...
(二)Lua型別與值
lua有八種基礎型別 nil 空 boolean 布林 number 數字 string 字串 userdata 使用者自定義 function 函式 thread 執行緒 and table 表 nil是一種型別,他只有nil乙個值,相當於無效值。全域性變數在第一次賦值前預設值就是nil,也就是說...