91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

lua table引用問題

發布時間:2020-07-06 12:02:26 來源:網絡 閱讀:5333 作者:leejia1989 欄目:建站服務器


一,基礎

1,在lua中,table只是傳遞引用(即兩個變量都指向同一片內存空間),所以不能用簡單的 "=" 來copy兩個表,并試圖修改一個表中的值。

tb = {}
tb.a = 11
tb.b = 22
tb_ref = tb
function p(tip)
  print("--------------------------"  .. tip)
  print("tb.a = " .. tb.a .. "    " .. "tb.b = " .. tb.b)
  print("tb_ref.a = " .. tb_ref.a .. "    " .. "tb_ref.b" .. tb_ref.b)
end
p("原始")
tb_ref.a = 33
p("修改了引用的a = 33,原來的a也變了")
tb.b = 44
p("修改了原始的b = 44,引用的b也變了")
print("----------------------非表test")
a = 1
c = a
c = 3
print("a = " .. a)
print("c = " .. c) 
打印結果:
--------------------------原始
tb.a = 11    tb.b = 22
tb_ref.a = 11    tb_ref.b22
--------------------------修改了引用的a = 33,原來的a也變了
tb.a = 33    tb.b = 22
tb_ref.a = 33    tb_ref.b22
--------------------------修改了原始的b = 44,引用的b也變了
tb.a = 33    tb.b = 44
tb_ref.a = 33    tb_ref.b44
----------------------非表test
a = 1
c = 3

結果:  

當改變表的一個值以后,它的引用的值也發生了變化;

對于非表的一般常數來說,它的賦值不存在引用的問題;


2,table存儲

1)table里保存數據,數據可以是任何類型,包括function。 

2)table里也可以保存table 

3)key代表數據存儲的位置

4)value就是用特定的key存儲的數據 


二,記錄遇見的一個關于table的問題

代碼如下:

local cjson = require("cjson")
local t = {["GET"] = {["/a"] = "f"}}

function hehe(node)
   node["TOKEN"] = node["TOKEN"] or {}
   ngx.log(ngx.ERR, "0", cjson.encode(t["GET"]))
   ngx.log(ngx.ERR, "0", cjson.encode(node))
   ngx.log(ngx.ERR, "0", tostring(node))

   node = node["TOKEN"]
   ngx.log(ngx.ERR, "1", cjson.encode(t["GET"]))
   ngx.log(ngx.ERR, "1", cjson.encode(node))
   ngx.log(ngx.ERR, "1", tostring(node))

   node["TOKEN"] = "123"
   ngx.log(ngx.ERR, "2", cjson.encode(t["GET"]))
   ngx.log(ngx.ERR, "2", cjson.encode(node))
   ngx.log(ngx.ERR, "2", tostring(node))
end

hehe(t["GET"])
ngx.say("ok")

nginx日志中的結果:

2017/07/10 15:28:16 [error] 20400#0: *749 [lua] access_by_lua(nginx.conf:138):8: hehe(): 0{"\/a":"f","TOKEN":{}}, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1:8888"
2017/07/10 15:28:16 [error] 20400#0: *749 [lua] access_by_lua(nginx.conf:138):9: hehe(): 0{"\/a":"f","TOKEN":{}}, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1:8888"
2017/07/10 15:28:16 [error] 20400#0: *749 [lua] access_by_lua(nginx.conf:138):10: hehe(): 0table: 0x41dfca60, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1:8888"
2017/07/10 15:28:16 [error] 20400#0: *749 [lua] access_by_lua(nginx.conf:138):13: hehe(): 1{"\/a":"f","TOKEN":{}}, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1:8888"
2017/07/10 15:28:16 [error] 20400#0: *749 [lua] access_by_lua(nginx.conf:138):14: hehe(): 1{}, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1:8888"
2017/07/10 15:28:16 [error] 20400#0: *749 [lua] access_by_lua(nginx.conf:138):15: hehe(): 1table: 0x41e011e0, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1:8888"
2017/07/10 15:28:16 [error] 20400#0: *749 [lua] access_by_lua(nginx.conf:138):18: hehe(): 2{"\/a":"f","TOKEN":{"TOKEN":"123"}}, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1:8888"
2017/07/10 15:28:16 [error] 20400#0: *749 [lua] access_by_lua(nginx.conf:138):19: hehe(): 2{"TOKEN":"123"}, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1:8888"
2017/07/10 15:28:16 [error] 20400#0: *749 [lua] access_by_lua(nginx.conf:138):20: hehe(): 2table: 0x41e011e0, client: 127.0.0.1, server: , request: "GET / HTTP/1.1", host: "127.0.0.1:8888"


結果分析:

1,lua中table相關操作包括做為function的參數都是引用操作,在function中對table node的key,value的相關操作都是對原table t的操作;

2,node = node["TOKEN"] 這一步操作相當于把node的內存地址指向了node["TOKEN"]的內存地址(即t["GET"]["TOKEN"]的內存地址),故之后對node的操作,都會影響到t["GET"]["TOKEN"]。



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鹤峰县| 阳春市| 内江市| 安顺市| 宿迁市| 菏泽市| 河曲县| 玛曲县| 邵阳市| 安顺市| 光泽县| 武川县| 临洮县| 元阳县| 襄垣县| 龙里县| 边坝县| 多伦县| 德州市| 大埔县| 嘉黎县| 徐汇区| 夏津县| 宣威市| 玛纳斯县| 扶余县| 怀化市| 浏阳市| 湖南省| 滁州市| 马鞍山市| 连州市| 东安县| 河南省| 台东市| 沙雅县| 塔河县| 洛扎县| 新密市| 元江| 黄梅县|