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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LUA 环境

發(fā)布時(shí)間:2025/3/18 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LUA 环境 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

LUA 環(huán)境

LUA中環(huán)境是指一個(gè)函數(shù)執(zhí)行的表,即一個(gè)函數(shù)在什么表中執(zhí)行。

這里的函數(shù)是特殊的,是loadfile("x.lua")的返回值。

loadfile("x.lua")從x.lua文件加載源碼,形成一個(gè)源碼塊,但沒有執(zhí)行。只有手動(dòng)去執(zhí)行它才會(huì)真正運(yùn)行其中代碼,如下:

local func = loadfile("x.lua")

func() --執(zhí)行該源碼,開始逐行運(yùn)行x.lua中的代碼,如 require, 函數(shù)外的print等。

如何設(shè)置環(huán)境呢,如下:

local env = {}

setfenv(func, env)

這樣就設(shè)置了x.lua的執(zhí)行環(huán)境為表env。這有二層意思:

1,執(zhí)行func()后,env中就有了x.lua中所有的東西。

2,x.lua的視野被限制在了env中。env中沒有的東西都不可用

示例如下:

1,rect.lua

Rect = {}Rect.Init = function(self, x,y,w,h)self.x = xself.y = yself.w = wself.h = hprint("init------------", x, y, w, h) end

2,testenv.lua

local func = loadfile("rect.lua")--加載源文件,并以函數(shù)的形式返回local env = {} setmetatable(env, {__index = _G})--繼承全局環(huán)境,如果不繼承則setfenv后無法使用LUA API,如print等if type(func) == "function" thensetfenv(func, env)func() --在環(huán)境env中執(zhí)行源文件,執(zhí)行后env中就有了Rect類end--生成一個(gè)新環(huán)境的好處是:執(zhí)行時(shí)是在新環(huán)境(即新表)中執(zhí)行的, --生成數(shù)據(jù)和操作數(shù)據(jù)都是對(duì)新環(huán)境(新表)的操作,不會(huì)影響全局環(huán)境_G local Rect = env.Rect Rect:Init(1,2,3,4)--也可以這樣調(diào)用,類似_G["a"]的用法 env["Rect"]:Init(3,5,3,5)--注意type(k) == "string" for k, v in pairs(env) do print(k, type(k)) -- Rect string end

?

posted on 2017-09-12 17:39 時(shí)空觀察者9號(hào) 閱讀(...) 評(píng)論(...) 編輯 收藏

總結(jié)

以上是生活随笔為你收集整理的LUA 环境的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。