Lua是動態類型語言,變量不需要類型聲明,每一個變量都可能包含任一種類型值。一般情況下,同一變量表示不同類型的值會造成混亂,最好不要這么使用。
Lua中有8個基本類型:nil、boolean、number、string、userdata、function、thread和table。
函數type可以用string類型返回變量的類型值。
1 nil
- 只包含一個值,nil;
- 任何類型在未賦值之前都是nil;
- 全局變量賦值為nil時,刪除該變量。
2 boolean
- 有兩個值,true和false;
- false和nil表示假,其余情況都為真。
3 number
- 表示實數,包括浮點數和整形數
4 string
- 表示一個字符序列,可以包含任意長度(可以為空也可以是整本書)任意字符(包括c/c++中的終止字符0);
- 標識可以是單引號,也可以是雙引號(建議統一使用一種);
- 字符串連接操作符為".."(例:"Hello ".."World");
- 使用"#"可獲得字符串長度(例:#(Hello World));
- 可以在字符串中使用\ddd(ddd為三位十進制數字)方式表示字母,例如下列兩個字符串相同;
"alo\n123\""
'\97lo\10\04923"'
- 可以使用 [[...]] 表示字符串;
- 可以使用轉義字符:
\a bell
\b back space -- 后退
\f form feed -- 換頁
\n newline -- 換行
\r carriage return -- 回車
\t horizontal tab -- 制表
\v vertical tab
\\ backslash -- "\"
\" double quote -- 雙引號
\' single quote -- 單引號
\[ left square bracket -- 左中括號
\] right square bracket -- 右中括號
- 運行時,Lua會自動在string和numbers之間自動進行類型轉換。當一個字符串使用算術操作符時,string就會被轉成數字;當Lua期望一個string而碰到數字時,會將數字轉成string;
- 顯式的將string轉成數字使用函數tonumber(),如果string不是正確的數字,該函數將返回nil;
- 顯示的將number轉成string,使用函數tostring(),這種轉換一直有效。
5 userdata
- userdata可以將C數據存放在Lua變量中;
- userdata在Lua中除了賦值和相等比較以外,沒有預定義的操作;
- userdata用來描述應用程序或者使用C實現的庫創建的新類型。(后續部分會詳細介紹)
6 function
- 函數是第一類值。它可以存儲在變量中;可以作為函數的參數;可以作為函數的返回值;
- Lua可以調用lua或C實現的函數,其中Lua所有的標準庫(string庫、table庫、I/O庫、OS庫、算術庫、debug庫)都是用C實現的。
7 thread
線程,后續部分會詳細介紹。
8 table
表,后續部分會詳細介紹。