2011年9月18日 星期日

[Lua Note] 2 - Types and Values


Types and Values

Lua的變數型態完全取決於assign的值,而Lua有8個基本資料型態nil、boolean、number、string、userdata、function、thread和 table等。
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print(type(a))
nil
> a="hello"
> print(type(a))
string
> a=3*5
> print(type(a))
number
> a=function() end
> print(type(a))
function
> a=true
> print(type(a))
boolean


nil

nil和C/Java Script的null意思差不多,當宣告一個變數還沒有給值,預設值就是nil,而當給變數nil就相當於delete這個變數。
> x = {}
> x["y"] = 1
> for k,v in pairs(x) do
>> print(k,v)
>> end
y       1
> x["y"] = nil -- 將y自x中移除
> for k,v in pairs(x) do
>> print(k,v)
>> end
> -- 沒有印出y了


booleans

說到boolean大家應該都知道boolean只有兩種值,true/false,在lua中,除了nil和false是false以外,其他都是true。not則是反轉boolean。
> print(x)
nil
> print(not not x)
false
> x=0
> print(not not x)
true -- 和C不同唷
> x=false
> print(not not x)
false
> x = function() end
> print(not not x)
true


numbers

Lua中沒有整數(integer),數值(numbers)是用雙精度儲存(double-precision floating-point)。


strings

Lua中的字串是儲存8-bit的字元,所以您可以儲存任何的資訊,和C不同的地方是C用null-terminated("\0"當結數符號),而Lua會用length紀錄字串長度。
當Lua中的字串是不能改變的,一旦改變就等同重新建立一個新字串,這點和C也不同。
Lua的字串除了可以用雙引號和單引號表示外,還可以用 [[...]]表示。
> s1="test1"
> s2='test2'
> s3=[[
>> test1
>> test2
>> ]]
> print(type(s3))
string
> print(s3)
test1
test2

Lua中字串可以用..串接在一起。
和JavaScript一樣,Lua在字串和數字之間的數學運算會試著將字串轉成數字,轉失敗就會出現error。
> print(10 .. "1")
101
> print(10 + "1")
11
> print(10 .. "x")
10x
> print(10 + "x")
stdin:1: attempt to perform arithmetic on a string value
stack traceback:
        stdin:1: in main chunk
        [C]: ?


table

table也稱為associative arrays,key可以是任何的資料型態,除了nil以外,都可以當key(或稱index),而任何其值可以是任何的資料型態,其表示法和一般C的array類似都是用"[]"來取值。
> x = {
[1] = "one",
["2"] = "two",
[3.0] = "three",
}
> print(x[1])
one
> print(x["2"]); print(x[3.0])
two
three



沒有留言:

張貼留言

熱門文章