Я хотел бы установить разные среды для одной и той же функции в Lua 5.1 (luajit):
f = function() print(a) end
b = setfenv(f, { a = 1, print = print })
c = setfenv(f, { a = 2, print = print })
Я хотел бы, чтобы b()
и c()
печатали разные числа
Я взломал способ, создав новые фрагменты функций на основе string.dump
и привязав к нему env, но есть ли лучший, более элегантный способ? В качестве альтернативы, может ли функция каким-то образом иметь разные значения upvalue в зависимости от некоторого условия?
function bind_env(f, env)
return setfenv(loadstring(string.dump(f)), env)
end
Спасибо!
b = function(...) return setfenv(f, b_env_table)(...) end
. Может быть, это было бы достаточно быстро ;-) - person Egor Skriptunoff   schedule 21.08.2014