2017-10-06 3 views
1

나는 loadfile으로로드 한 스크립트를 실행했다. 또한 부모 루아 스크립트의 범위에 love 변수가 있고이 변수는 자식 스크립트 enivornment 안에 nil이 되길 원하지만 다른 모든 것은 그대로 둔다 (print, math, pairs, 루아의 모든 표준 라이브러리). 어떻게해야합니까?루아의 하위 스크립트 환경에서 변수를 제거하는 방법은 무엇입니까?

이 작동하지 않습니다 env_G에서 상속과는 너무 env.love_G에서 해결되기 때문에

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

답변

1

귀하의 코드가 작동하지 않습니다. env.love = nil을 설정하면 love 항목이 env에 추가되지 않습니다.

세트 env.love = false 또는 env.love = {}.

+0

왜 'nil'로 설정하면 추가되지 않습니까? –

+0

'nil '으로 설정하면 테이블의 항목이 제거됩니다. – lhf

+0

하지만 자식 스크립트는 여전히 그 영역에서'love'를 사용할 수 있습니다. –

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 -이 질문은 작성자가 코드에서이 함수를 사용하므로 루아 5.1에 관한 것입니다 (이 저자의 이전 질문도보십시오). –

+0

@EgorSkriptunoff 동의했는데, 누군가가 미래에이 질문을 우연히 발견하고 자신의 대답이 왜 효과가 없는지 궁금해 할 때를 대비해 덧붙였다. – ComicSansMS

관련 문제