2017-10-06 94 views
1

我有一個腳本,我加載loadfile然後運行它。此外,我有變量love在父lua腳本的範圍內,我想這個變量是nil裏面的子腳本enivornment但其他一切都沒有觸動(print,math,pairs,所有的Lua的標準庫)。我怎樣才能做到這一點?如何從lua中的子腳本環境中移除一個變量?

這不起作用:

local scenario = love.filesystem.load(script) 
local env = {} 
setmetatable(env, { __index = _G }) 
env.love = nil 
env.game = Game 
setfenv(scenario, env) 

回答

1

您的代碼不起作用,因爲從_Genv繼承等env.love_G解決。設置env.love = nil不會將love條目添加到env

Set env.love = false or env.love = {}

+0

爲什麼將它設置爲'nil'不會添加它? –

+0

設置爲'nil'將刪除表中的條目。 – lhf

+0

但它沒有 - 子腳本仍然可以在它的範圍內使用「愛」。 –

2
local scenario = love.filesystem.load(script) 
local env = setmetatable({}, { __index = 
    function(t, k) 
     if k == "love" then 
     return nil 
     else 
     return _G[k] 
     end 
    end 
}) 
setfenv(scenario, env) 
+0

請注意,'setfenv' [在Lua 5.2中被刪除](https://www.lua.org/manual/5.2/manual.html#8.2)。 – ComicSansMS

+0

@ComicSansMS - 這個問題是關於Lua 5.1的,因爲作者在他的代碼中使用了這個函數(看這個作者以前的問題)。 –

+0

@EgorSkriptunoff同意,我只是在未來有人在這個問題上磕磕絆絆的時候添加了評論,並想知道爲什麼你的答案對他們不起作用。 – ComicSansMS

相關問題