2016-05-23 3 views
1

предположим, что я пишу следующий код:как получить первоначальную функцию обратно в Lua

>a=print 
>print=1 
>a=1 

> print(1) 
stdin:1: attempt to call global 'print' (a number value) 
stack traceback: 
    stdin:1: in main chunk 
    [C]: in ? 

Как я могу получить оригинальную функцию «печать»?

+0

'печать = функция (...) io.write (table.concat ({...},» \ t ') ..' \ n ') end' –

+0

Технически вы можете использовать обход, если планируете заранее. например '_print = print; print = 1', а затем вы можете вернуть его в нормальное состояние 'print = _print' – DavisDude

ответ

3

Вы не можете.

Функции Lua - это значения, как и любое другое значение. Если вы измените значение, в котором хранится функция Lua, функция там больше не будет храниться. И если вы измените последнее значение, которое содержит эту функцию ... тогда функция будет потеряна навсегда.

От C, вы можете быть в состоянии вызвать luaopen_base снова, но это доступно только из C.

Смежные вопросы