Lua base _G

全局環(huán)境.jpg

前言

今天來看一個Lua中的一個非常重要的全局變量_G,這個變量可以說是Lua中最重要的一個變量了,其中保存了lua語言中幾乎所有的全局函數(shù)和變量,那究竟這個變量有什么用呢,我們可以通過例子來了解一下。

內(nèi)容


_G

  • 原型:_G
  • 解釋:首先要注意的是,_G是一個變量而不是一個函數(shù),它掌控了整個全局環(huán)境(其中_G._G = _G)。Lua語言本身并不使用這個變量,改變這個變量的值也不會對運行環(huán)境產(chǎn)生影響(使用函數(shù)setfenv() 可以改變運行環(huán)境)。

usage

  • 首先我們新建一個文件將文件命名為_Gtest.lua然后編寫代碼如下:
-- 先輸出一下函數(shù)是否存在
print("print_message = ", tostring(_G["print_message"]))

-- 先寫一下全局函數(shù)
function print_message(str)
    print("Lua output : "..str)
end

-- 再輸出一下函數(shù)是否存在
print("print_message = ", tostring(_G["print_message"]))

-- 調(diào)用函數(shù)
local func = _G["print_message"]
func("print_message function is exist!")

-- 定義局部函數(shù)
local function local_name()
    print("Lua output : this is local functon")
end

-- 檢查一下局部函數(shù)是否存在
print("local_name = ", tostring(_G["local_name"]))

_G["local_name"] = local_name;

-- 調(diào)用就已經(jīng)變成全局函數(shù)的局部函數(shù)

_G["local_name"]()
  • 運行結(jié)果
base__G.png
  • 可能大家對_G中都有什么很好奇,那我就輸出部分_G內(nèi)容,看看里面都是些什么東西:
_G
├── string: 
|    ├── sub: function: 006AEB70
|    ├── upper: function: 006AEBB8
|    ├── len: function: 006AE290
|    ├── gfind: function: 006AE170
|    ├── rep: function: 006AE3F8
|    ├── find: function: 006ADFC0
|    ├── match: function: 006AE368
|    ├── char: function: 006ADEA0
|    ├── dump: function: 006ADF30
|    ├── gmatch: function: 006AE170
|    ├── reverse: function: 006AE440
|    ├── byte: function: 006ADE10
|    ├── format: function: 006AE050
|    ├── gsub: function: 006AE200
|    └── lower: function: 006AE2D8
├── xpcall: function: 006AA630
├── package: 
|    ├── preload: 
|    |    └── { }
|    ├── loadlib: function: 006AAD80
|    ├── loaded: 
|    |    └── { }
|    ├── loaders: 
|    |    ├── 1] function: 006AAEA0
|    |    ├── 2] function: 006AAEE8
|    |    ├── 4] function: 006AAF78
|    |    └── 3] function: 006AAF30
...

總結(jié)

  • _G保存了lua所用的所有全局函數(shù)和全局變量,初始情況是只包含lua程序庫的函數(shù)和變量。
  • lua程序中定義的全局函數(shù)和變量會自動加入到_G中,而局部函數(shù)和變量不會這樣做。
  • 但是我們可以把局部函數(shù)使用鍵值對的方式保存在_G中,這樣我們就可以通過_G和名字來訪問原來的局部函數(shù)了
  • 由于_G中包含的東西比較多,會占用較多篇幅,所以在上述例子中我只輸出了部分內(nèi)容,如果你想知道詳細(xì)的內(nèi)容,可以給我留言,我發(fā)給你的完整版。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,334評論 0 17
  • 第一篇 語言 第0章 序言 Lua僅讓你用少量的代碼解決關(guān)鍵問題。 Lua所提供的機(jī)制是C不擅長的:高級語言,動態(tài)...
    testfor閱讀 2,955評論 1 7
  • 1.1程序塊:Lua執(zhí)行的每段代碼,例如一個源代碼文件或者交互模式中輸入的一行代碼,都稱為一個程序塊 1.2注釋:...
    c_xiaoqiang閱讀 2,689評論 0 9
  • 最近發(fā)生了很多事情。狀態(tài)已經(jīng)跌入了人生24年的最低谷,已經(jīng)比上一個低谷——高考落榜更嚴(yán)重在緘默期小心翼翼,膽戰(zhàn)心驚...
    hannah閱讀 330評論 0 1
  • kesain閱讀 233評論 0 1

友情鏈接更多精彩內(nèi)容