합리적인 방법으로 수행 할 수 없습니다. 이유의 예를 들어, 이것 좀 봐 :
function makefunction(name)
local a = 1
local b = 2
local c = 3
-- ...
return assert(loadstring("return " .. name))
end
local a = 4
local func = makefunction("a")
print(func())
를이 무엇을 인쇄, 일 경우? 1
또는 4
? 함수가 더 이상 존재하지 않더라도 함수가로드 된 위치에서 변수를 캡처합니까? 또는 그것이 불린 곳에서 그것을 찾으십니까?
첫 번째는 함수가 어딘가에서 어휘 적으로 범위가 지정된다는 것을 의미합니다. 함수가 종료 된 후에 변수에 액세스 할 수 있다는 것은 변수가 동적으로 상위 값으로 승격되어야한다는 것을 의미합니다. 이는 루아가 현재 할 수있는 것이 아닙니다. 현재 루아는 컴파일 중에 로컬 변수에 대한 모든 액세스를 볼 수 있기 때문에 어떤 변수가 업적 (성능 적중)과 로컬로 유지 될지를 안다.
두 번째는 loadstring
함수 내의 변수 액세스가 루아에서 다른 모든 액세스와 완전히 다르게 작동 함을 의미합니다. 루아는 동적 범위 지정이 아닌 어휘 범위 지정을 사용합니다. 그것은 Lua에서 거대한 구현 변경이 될 것이고, 매우 일관성이없는 변경이 될 것입니다.
어느 쪽도 지원되지 않습니다. 은 Lua 5.1에서 setfenv
또는 env
매개 변수 load(...)
을 사용하여 동적으로로드 된 함수의 환경을 제어하지만 둘 다 로컬 변수에 자동으로 액세스 할 수 없습니다.
처럼 보이도록 그렇게 할 수
처럼 보이게하기 위해 폐쇄를 구축 할 수 있습니다 왜 downvote? –