2015年3月23日 星期一

[Corona SDK] 基本型態和操作

Corona SDK是採用一種叫Lua的程式語言,
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: 就是falsetrue,在條件判斷式中我們會用到,
如果給的參數是falsenil,那結果就是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 的用法

另外,numberstring的轉換是很特別的,
如果對一個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"  都可以,

沒有留言:

張貼留言