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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LUA 环境

發布時間:2025/3/18 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LUA 环境 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LUA 環境

LUA中環境是指一個函數執行的表,即一個函數在什么表中執行。

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

loadfile("x.lua")從x.lua文件加載源碼,形成一個源碼塊,但沒有執行。只有手動去執行它才會真正運行其中代碼,如下:

local func = loadfile("x.lua")

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

如何設置環境呢,如下:

local env = {}

setfenv(func, env)

這樣就設置了x.lua的執行環境為表env。這有二層意思:

1,執行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")--加載源文件,并以函數的形式返回local env = {} setmetatable(env, {__index = _G})--繼承全局環境,如果不繼承則setfenv后無法使用LUA API,如print等if type(func) == "function" thensetfenv(func, env)func() --在環境env中執行源文件,執行后env中就有了Rect類end--生成一個新環境的好處是:執行時是在新環境(即新表)中執行的, --生成數據和操作數據都是對新環境(新表)的操作,不會影響全局環境_G local Rect = env.Rect Rect:Init(1,2,3,4)--也可以這樣調用,類似_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 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏

總結

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

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