Lua的型態定義是動態的,
它不像一般其它程式語言需要用類似int,String, boolean等去定義變數,
它會根據給定的參數型態自動定義,
例如:
t = 1 --自動設定為數值
t = "hello" --自動設定為字串
那可以先t = 1之後又t = "hello"嗎?
也就是說同一個變數,但型態改變?
答案是可以的,
Lua語言很...隨和^^
它會有幾種基本型態:
nil:當你只有宣告變數而沒有給定後面的參數時,它就是nil,和一般語言的null類似,
例如:local t 或者 local t = nil 都是,
此時如果對這個變數做操作會有錯誤
local t display.newText( t, display.contentCenterX, display.contentWidth / 4, native.systemFont, 40 )執行上面的代碼會得到"got nil"的錯誤訊息
boolean: 就是false和true,在條件判斷式中我們會用到,
如果給的參數是false或nil,那結果就是false,
其它種類都視為true,
if(true) then --條件會成立 display.newText( "hello true", display.contentCenterX, 20, native.systemFont, 20 ) end if(false) then --條件不會成立 display.newText( "hello false", display.contentCenterX, 40, native.systemFont, 20 ) end if(nil) then --條件不會成立 display.newText( "hello nil", display.contentCenterX, 60, native.systemFont, 20 ) end if(1) then --條件會成立 display.newText( "hello 1", display.contentCenterX, 80, native.systemFont, 20 ) end if(0) then --條件會成立 display.newText( "hello 0", display.contentCenterX, 100, native.systemFont, 20 ) end在上面代碼裡,if(0)還是視為true,這和其它語言不同
number: 用來表示實數(double-precision floating-point) ,
例如以下範例都可以
12 12.0 12.1895 12189.5e-3 0.121895E2 0xA3 0Xb22f
e或E用來表示指數,0x或0X表示16進位數值
string: 用來表示字元陣列,最後面內含0表示結束
function:
table: 算是Lua基本的資料結構,[Corona SDK] Table 的用法
另外,number和string的轉換是很特別的,
如果對一個number變數做字串操作,那它會先變成string型態,
例如以下代碼,雖然display.newText()是接受string來顯示,
但我們一樣可以丟給它number
t = 123 display.newText( t, display.contentCenterX, 100, native.systemFont, 20 )如果對一個string變數做數學運算,那它會先變成number型態,
例如以下範例,我們也可以對於一個字串"456.2"做數學運算,最後結果會印出"457.2"
t = "456.2" t = t + 1 display.newText( t, display.contentCenterX, 100, native.systemFont, 20 )上面的變數t,只要原來字串可以轉換成number型態的都行,
例如:t = "0x3a" t = "1E3" 都可以,
沒有留言:
張貼留言