2015年3月24日 星期二

[Corona SDK] 運算式 Expression

數學運算式 Arithmatic Operators
大部份基本的運算都有: +(加), -(減), *(乘), /(除), %(求餘), ^(指數)
沒什麼特別的,直接看範例:
print(17+2)      --> 19
print(-17-2)     --> -19
print(17*5)      --> 85
print(17/3)      --> 5.6666666666667
print(17%5)      --> 2
print(17^2)      --> 289
print(17^(-0.5)) --> 0.24253562503633, 相當於開根號

關係運算式 Relational Operators
有幾下幾種可用:
==     ~=      <      <=      >       >=
==常常被用來檢查二變數或物件是否相同,
它會檢查型態,如果型態不同,直接回傳false,
如果型態相同,而來會比較值是否一樣,
換句話說,之前[Corona SDK] 基本型態和操作提到的stringnumber自動轉換在此不適用,
例如, 123 == "123"會回傳false,
另外tablefunction的比較則是用reference,不是用value,
例如以下範例,雖然兩個table內容一樣,但結果會是false
t1 = {my,"123"}
t2 = {my,"123"}
print(t1==t2)   --> false
另外,~=就是將==反過來

邏輯運算式 Logical Operators
or, 如果第一個參數不是false且不是nil, 即傳回第一個參數,不然就傳回第二參數,
and, 如果第一個參數是falsenil, 即傳回第一個參數,不然就傳回第二參數,
not, 回傳truefalse
print(1 or 2)            --> 1
print(nil or true)       --> true
print(false or nil)      --> nil
print(3 and 4)           --> 4
print(not nil)           --> true
print(nil and "test")    --> nil
print(false and nil)     --> false
print(1 or 2 and 3)      --> 1
print(nil or 2 and 3)    --> 3
print(nil and 2 or 3)    --> 3

字串相加 Concatenation
用".."即可將兩字串相加,
之前[Corona SDK] 基本型態和操作提到的stringnumber自動轉換在此也適用
print("a" .. "b")       --> ab
print("a" .. 2)         --> a2
print(1 .. 2)           --> 12

長度 Length Operator
在變數前面加#即可取得stringtable的長度資訊
a = "hello"
print(#a)       --> 5
b = "哈囉你好"
print(#b)       --> 12
c = {}
c[1] = "33"
c["a"] = "55"
c[2] = "33"
print(#c)       --> 2
d = {}
d[0] = "33"
d["a"] = "55"
d[1] = "33"
d[3] = "33"
print(#d)       --> 1
e = {}
e[2] = "33"
e["a"] = "55"
e[3] = "33"
print(#e)       --> 0
中文字每個字有3個bytes,
table型態的長度是取連續數字index的最後一個為長度,
但如果index 1的項目為nil,則長度為0
例如 c[1],c[2]的index連續,且c[1]不是nil,所以長度為最後一個index值2,
d[0],d[1],d[3]的index不連續,所以長度為連續的最後一個index值1,
e[2],e[3]雖然連續,但是e[1]是nil,所以長度是0

沒有留言:

張貼留言