日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

全局变量声明的规范化

發布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 全局变量声明的规范化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  Lua將環境本身存儲在一個全局變量_G中,(_G._G等于_G)。為了對全局命名空間更好的管理,最好是顯示的聲明每一個變量,可以通過使用metamethod來改變_G的行為來進行規范:

-- 聲明新的變量,使用rawset繞過metamethod的限制 -- 保證聲明的變量不為nil,如果聲明一個nil變量,等于該變量還是不存在,訪問該變量的時候還是會觸發__index declare = function(name, initval)rawset(_G, name, initval or false) end--改變全局變量的訪問行為 setmetatable(_G, {__newindex = function (_, n)error("attempt to write to undeclared variable " ..n, 2)end,__index = function(_, n)error("attempt to read undeclared variable "..n, 2)end,} )declare("a") a = 1 print(a) -- 1 a = nil print(a) -- error 觸發__index,因為該變量已經釋放了

  上述代碼中,每一個變量都需要顯示declare,并且不能聲明nil變量。

  下面這種方法可以聲明nil變量,但需要用一個表來顯示的記錄每一個聲明過的變量:

local declareNames = {} function declare(name, initval)rawset(_G, name, initval)declareNames[name] = true endsetmetatable(_G, {__newindex = function (t, n, v)if not declareNames[n] thenerror("attempt to write to undeclared var. " ..n, 2)elserawset(t, n, v)endend,__index = function (_, n)if not declareNames[n] thenerror("attempt to read undeclared var. "..n, 2)elsereturn nilendend} )declare("a") a = 1 print(a) -- 1 a = nil print(a) -- nil 還是可以訪問

  個人偏向于第一種方法,因為第二種方法中,當一個變量被置為nil以后,實際上該變量已經被釋放了,所以將變量的置空操作封裝在一個undeclear函數中。對第二種方法的改進:

local declareNames = {} function declare(name, initval)rawset(_G, name, initval)declareNames[name] = true endfunction undeclare(name)declareNames[name] = nilrawset(_G, name, nil) endsetmetatable(_G, {__newindex = function (t, n, v)if not declareNames[n] thenerror("attempt to write to undeclared var. " ..n, 2)elserawset(t, n, v)endend,__index = function (_, n)if not declareNames[n] thenerror("attempt to read undeclared var. "..n, 2)elsereturn nilendend} )declare("a") a = 1 print(a) -- 1 undeclare("a") print(a) -- error 變量已經不存在了,會觸發__index

  兩種方法的代價都很小,可以忽略不計,但是給整個編程環境帶來的好處是不言而喻的。

?

轉載于:https://www.cnblogs.com/sifenkesi/p/3838311.html

總結

以上是生活随笔為你收集整理的全局变量声明的规范化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 欧美色图亚洲自拍 | www.色呦呦| 亚洲色图首页 | 激情亚洲天堂 | 少妇把腿扒开让我舔18 | 香港a毛片 | 国产精品国产精品国产专区不片 | 国产xxxx在线 | 日本真人做爰免费视频120秒 | 中字av在线 | 欧美怡红院视频 | 中文字字幕在线中文 | 韩国中文字幕hd久久精品 | 欧美18一19性内谢 | 韩国精品在线观看 | 色播视频在线观看 | 四虎影院一区二区 | a级片网站| 国产一区二区精品在线 | 精品人妻一区二区三区久久嗨 | 激情自拍偷拍 | 国产人妻aⅴ色偷 | 视频在线国产 | 99在线精品免费视频 | 七仙女欲春2一级裸体片 | 免费毛片网站在线观看 | 91网站在线观看视频 | 久久久久欧美 | 久久综合91 | 丰满多毛的大隂户视频 | 无码国产精品一区二区高潮 | 2019自拍偷拍 | 老太脱裤让老头玩ⅹxxxx | 精品国产欧美日韩 | 一级视频毛片 | 国产精品一卡二卡 | 国产网站免费在线观看 | 极品人妻videosss人妻 | 麻豆视频在线观看免费网站 | 谁有毛片网站 | 久久精精品久久久久噜噜 | 日日干夜夜拍 | 亚洲精品88| 国产不卡一 | 波多野结衣久久 | 日韩人妻无码一区二区三区99 | 爱爱高潮视频 | 成人动漫在线观看免费 | 18av视频| 成人av高清在线 | 日韩中文字幕网站 | 国产高清精品软件丝瓜软件 | 成人一区二区在线观看 | 国产伦精品一区二区三区妓女下载 | 日本黄色成人 | 99无码熟妇丰满人妻啪啪 | 亚洲免费在线视频观看 | 欧美韩日国产 | 亚洲超碰在线观看 | 欧美精品国产一区二区 | 国产福利不卡视频 | 天天射天天干 | 精品欧美一区二区三区 | 一区二区不卡在线 | 一区二区三区欧美视频 | 精品国产专区 | 久久人妻一区二区 | 91老司机在线 | 中文字幕在线看 | 日韩欧美第一页 | 黄色.com | 日韩三级久久 | 午夜爽爽影院 | 熊猫成人网 | 国产精品一区在线播放 | 国产jizz18女人高潮 | 亚洲黄色在线看 | 天天摸天天爽 | 欧美成人69 | 69xav| 高h视频在线观看 | 狠狠干欧美 | 中国黄色一级毛片 | 中国美女黄色 | 乱子伦一区 | 色女孩综合 | 中出 在线 | 超碰97自拍 | 有码在线播放 | 黄色aa网站 | 精品无码久久久久久久 | 免费网站在线高清观看 | 久久综合激的五月天 | 少妇饥渴难耐 | 成人免费无码大片a毛片 | 99精品在线视频观看 | 欧美丰满美乳xxⅹ高潮www | 91久久久久 | 中文字幕亚洲乱码熟女一区二区 |