2015-05-09 2 views
0

Есть ли способ использовать i++ вместо i = i + 1 в Lua? Я думаю, что это возможно, так как Lua может напрямую использовать функции C. Как использовать i ++ и ++ i из C в Lua

+4

'++' не является функцией C, это оператор. Поэтому Lua, способный использовать функции C, неприменим. –

+0

Возможный дубликат http://stackoverflow.com/questions/7855525/simulate-in-lua-is-it-possible. – lhf

+0

не обязательно - мне любопытно, есть ли какой-либо хакерский способ достижения 'i ++' в Lua. Спасибо, в любом случае. Функция 'increment' - это способ как-то –

ответ

2

Если вы хотите избежать ввода текста, посмотрите, может ли ваш редактор расширять ++i до i = i + 1.

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

function num(v) 
    local t = {v or 0} 
    function postinc(t, i) 
    local old = t[1] 
    t[1] = t[1] + (i or 1) 
    return old 
    end 
    setmetatable(t, {__call=postinc}) 
    return t 
end 


i = num() 
print(i()) -- print(i++) 
i()   -- i++ 
print(i(0)) -- print(i) 

Написание кода, как это никогда не стоит, получить доступ к «значение» из i теперь требует i(0).

3

Вам нужно будет изменить парсер, чтобы принять ++, так как он не является частью синтаксиса. Однако создание нового несовместимого диалекта Lua для сохранения нескольких персонажей не стоит того.

Определение какой-то функции для этого не будет работать вообще либо, так как функции в Lua являются передача по значению, так что вы должны были бы написать

i = incr(i) 

, который довольно много поражений и не позволяет вам выразить ++i в любом случае.

Возможно, вы могли бы сделать incr 'variableName' и испортить местную среду вызывающей функции ... но опять же, это просто сложно, не стоит проблем и вообще ужасная идея во всех отношениях.

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