openresty开发系列15--lua基础语法4表table和运算符
openresty開發系列15--lua基礎語法4表table和運算符
lua中的表table
一)table (表)
Table 類型實現了一種抽象的"關聯數組"。即可用作數組,也可以用作map。
lua中沒有數組和map,都是用table這個類型
--數組
java?? int[] intArr = new int[]{1,2,3,4,5,6};
intArr[0]
intArr[1]
--map----> key value
HashMap map
map.add(key,value)
-- 初始化表
mytable = {}
-- 指定值
mytable[1]= "Lua"
mytable[2]= "Lua2"
mytalbe["k1"] = v1;
-- 移除引用
mytable = nil
-- lua 垃圾回收會釋放內存
lua類似數組的table ,索引值從1開始,,而不是0
mytable={1,2,3,4,5}
mytalbe[1]
mytable={"a","b","hello","world"}
mytable1 = {key1 = "v1",k2="v2",k3="v3"}
mytable2 = {"a",key1 = "v1","b",k2="v2",k3="v3","hello","world"}
print(mytable[1],mytable[2],mytable[3],mytable[4]);
print("------------------")
print(mytable1["key1"],mytable1["k2"],mytable1["k3"]);
print("------------------")
print(mytable2[1],mytable2["key1"],mytable2[2],mytable2["k2"],mytable2[3],mytable2[4]);
talbe?? key可以為 number 或字符串,,也可以是其他類型
table 是內存地址 賦值給變量
二)table進行賦值給變量,其實是把內存地址給了變量,變量只是引用了內存地址
local mytable1 = {"a",key1 = "v1","b",k2="v2",k3="v3","hello","world"}
local mytable2 =? mytable1
mytable2[1] = "aa"
print(mytable2[1])
print(mytable1[1])
mytable2 = nil? --移除的是引用
print("-------------")
print(mytable1[1])
內存指針--》C++
lua算數運算符
一)算術運算符
+?? ?加法?? ?
-?? ?減法?? ?
*?? ?乘法?? ?
/?? ?除法?? ?
%?? ?取余?? ?
^?? ?乘冪?? ?
-?? ?負號
print(1 + 2)?????? -->打印 3
print(5 / 10)????? -->打印 0.5。 這是Lua不同于c語言的
print(5.0 / 10)??? -->打印 0.5。 浮點數相除的結果是浮點數
-- print(10 / 0)?? -->注意除數不能為0,計算的結果會出錯
print(2 ^ 10)????? -->打印 1024。 求2的10次方
local num = 1357
print(num % 2)?????? -->打印 1
print((num % 2) == 1) -->打印 true。 判斷num是否為奇數
print((num % 5) == 0)? -->打印 false。判斷num是否能被5整數
二)關系運算符
==?? ?等于,檢測兩個值是否相等,相等返回 true,否則返回 false?? ?
~=?? ?不等于,檢測兩個值是否相等,相等返回 false,否則返回 true?? ?不想java !=,,~=
>?? ?大于,如果左邊的值大于右邊的值,返回 true,否則返回 false?? ?
<?? ?小于,如果左邊的值大于右邊的值,返回 false,否則返回 true?? ?
>=?? ?大于等于,如果左邊的值大于等于右邊的值,返回 true,否則返回 false?? ?
<=?? ?小于等于, 如果左邊的值小于等于右邊的值,返回 true,否則返回 false
print(1 < 2)??? -->打印 true
print(1 == 2)?? -->打印 false
print(1 ~= 2)?? -->打印 true
local a, b = true, false
print(a == b)? -->打印 false
注意:table, userdate 和函數;判斷的是引用地址的判斷
local a = { x = 1, y = 0}
local b = { x = 1, y = 0}
if a == b then
? print("a==b")
else
? print("a~=b")
end
三)邏輯運算符
and?? ?邏輯與操作符。(A and B) 若 A 為 假,則返回 A,否則返回 B
or?? ?邏輯或操作符。(A or B) 若 A 為 真,則返回 A,否則返回 B
not?? ?邏輯非操作符。與邏輯運算結果相反,如果條件為 true,邏輯非為 false。 永遠只返回 true 或者 false
local c = nil
local d = 0
local e = 100
print(c and d)? -->打印 nil
print(c and e)? -->打印 nil
print(d and e)? -->打印 100
print(c or d)?? -->打印 0
print(c or e)?? -->打印 100
print(d or e)?? -->打印 0
print(not c)??? -->打印 true
print(not d)??? -->打印 false
短路取值 原理
and? 與,,,if(a and b and c)
a and b and c?? a為真,b為真,c為真? 返回c
??????????????? a為真,b為假,c為真? 返回b
??????????????? a為假 bc不管bc為什么值? 返回a
??????????????? 一路去判斷變量值是否為真,一旦遇到某個變量為假,就立刻短路返回 返回值就是 假的變量值
a or b or c???? 一路判斷變量值是否為真,一但遇到某個變量為真,就立刻短路返回,返回值就是 真的變量值
?? ??? ??? ??? ?a為真,bc??? 返回a
?? ??? ??? ??? ?a為假,b為真,不管c是什么值 返回b
四)其他運算符
..?? ?連接兩個字符串?? ?a..b ,其中 a 為 "Hello " , b 為 "World", 輸出結果為 "Hello World"。
#?? ?一元運算符,返回字符串或表的長度。 #"Hello" 返回 5
很多字符串連接 我們如果采用..這個運算符 ,性能是很低
推薦使用 table 和 table.concat() 來進行很多字符串的拼接
五)優先級
^
not ? #?-
* ? / ? %
+ ? -
..
<?>?<=? >= ?==? ~=
and
or
------------------------
local a, b = 1, 2
local x, y = 3, 4
local i = 10
local res = 0
res = a + i < b/2 + 1? -->等價于res =? (a + i) < ((b/2) + 1)
res = 5 + x^2*8??????? -->等價于res =? 5 + ((x^2) * 8)
res = a < y and y <=x? -->等價于res =? (a < y) and (y <= x)
轉載于:https://www.cnblogs.com/reblue520/p/11429741.html
總結
以上是生活随笔為你收集整理的openresty开发系列15--lua基础语法4表table和运算符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openresty开发系列14--lua
- 下一篇: openresty开发系列16--lua