2
兩次關閉如何分擔價值?它是如何工作的?什麼是共享的upvalues?
function print_env()
print(_ENV) --_ENV is an upvalue
end
function foo()
_ENV = { print = print, print_env = print_env} --redefine the _ENV upvalue
print(_ENV) --prints: 0094CF40
print_env() --prints: 0094CF40
end
當我打電話print_env()
從foo()
它打印在foo()
定義的_ENV
,但因爲它們是不同的職能不應及其封閉有不同的upvalues?所以當一個函數修改它的高價時,另一個函數保持不變。或者是_ENV
特價?
謝謝
至於我,'foo()'打印兩條相同的線。所有三次出現'_ENV'參考相同的價值。 –
@EgorSkriptunoff我試着用dofile來運行代碼,它在兩個函數中都使用相同的upvalue。但爲什麼會發生? –
我認爲_ENV在這種情況下是塊upvalue而不是函數。 _ENV = ...與_G._ENV = ...相同您可以執行本地_ENV = ...以創建特定函數的upvalue。 – moteus