openresty开发系列15--lua基础语法4表table和运算符
openresty開發(fā)系列15--lua基礎(chǔ)語法4表table和運(yùn)算符
lua中的表table
一)table (表)
Table 類型實(shí)現(xiàn)了一種抽象的"關(guān)聯(lián)數(shù)組"。即可用作數(shù)組,也可以用作map。
lua中沒有數(shù)組和map,都是用table這個(gè)類型
--數(shù)組
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 垃圾回收會(huì)釋放內(nèi)存
lua類似數(shù)組的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 是內(nèi)存地址 賦值給變量
二)table進(jìn)行賦值給變量,其實(shí)是把內(nèi)存地址給了變量,變量只是引用了內(nèi)存地址
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])
內(nèi)存指針--》C++
lua算數(shù)運(yùn)算符
一)算術(shù)運(yùn)算符
+?? ?加法?? ?
-?? ?減法?? ?
*?? ?乘法?? ?
/?? ?除法?? ?
%?? ?取余?? ?
^?? ?乘冪?? ?
-?? ?負(fù)號(hào)
print(1 + 2)?????? -->打印 3
print(5 / 10)????? -->打印 0.5。 這是Lua不同于c語言的
print(5.0 / 10)??? -->打印 0.5。 浮點(diǎn)數(shù)相除的結(jié)果是浮點(diǎn)數(shù)
-- print(10 / 0)?? -->注意除數(shù)不能為0,計(jì)算的結(jié)果會(huì)出錯(cuò)
print(2 ^ 10)????? -->打印 1024。 求2的10次方
local num = 1357
print(num % 2)?????? -->打印 1
print((num % 2) == 1) -->打印 true。 判斷num是否為奇數(shù)
print((num % 5) == 0)? -->打印 false。判斷num是否能被5整數(shù)
二)關(guān)系運(yùn)算符
==?? ?等于,檢測(cè)兩個(gè)值是否相等,相等返回 true,否則返回 false?? ?
~=?? ?不等于,檢測(cè)兩個(gè)值是否相等,相等返回 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 和函數(shù);判斷的是引用地址的判斷
local a = { x = 1, y = 0}
local b = { x = 1, y = 0}
if a == b then
? print("a==b")
else
? print("a~=b")
end
三)邏輯運(yùn)算符
and?? ?邏輯與操作符。(A and B) 若 A 為 假,則返回 A,否則返回 B
or?? ?邏輯或操作符。(A or B) 若 A 為 真,則返回 A,否則返回 B
not?? ?邏輯非操作符。與邏輯運(yùn)算結(jié)果相反,如果條件為 true,邏輯非為 false。 永遠(yuǎn)只返回 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
??????????????? 一路去判斷變量值是否為真,一旦遇到某個(gè)變量為假,就立刻短路返回 返回值就是 假的變量值
a or b or c???? 一路判斷變量值是否為真,一但遇到某個(gè)變量為真,就立刻短路返回,返回值就是 真的變量值
?? ??? ??? ??? ?a為真,bc??? 返回a
?? ??? ??? ??? ?a為假,b為真,不管c是什么值 返回b
四)其他運(yùn)算符
..?? ?連接兩個(gè)字符串?? ?a..b ,其中 a 為 "Hello " , b 為 "World", 輸出結(jié)果為 "Hello World"。
#?? ?一元運(yùn)算符,返回字符串或表的長(zhǎng)度。 #"Hello" 返回 5
很多字符串連接 我們?nèi)绻捎?.這個(gè)運(yùn)算符 ,性能是很低
推薦使用 table 和 table.concat() 來進(jìn)行很多字符串的拼接
五)優(yōu)先級(jí)
^
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? -->等價(jià)于res =? (a + i) < ((b/2) + 1)
res = 5 + x^2*8??????? -->等價(jià)于res =? 5 + ((x^2) * 8)
res = a < y and y <=x? -->等價(jià)于res =? (a < y) and (y <= x)
轉(zhuǎn)載于:https://www.cnblogs.com/reblue520/p/11429741.html
總結(jié)
以上是生活随笔為你收集整理的openresty开发系列15--lua基础语法4表table和运算符的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: openresty开发系列14--lua
- 下一篇: openresty开发系列16--lua