Я пытался понять, как работают блоки Ruby, и для этого я пытался реализовать их в C.
Один простой способ реализовать замыкания - это передать void*
во вмещающий стек в замыкание / функцию, но блоки Ruby, похоже, также обрабатывают операторы возврата и прерывания из области, в которой используется блок.
loop do
break i if (i >= 4000)
i *= 2
end
Я думаю, что одно из предложений замыканий для Java работает так же.
Итак, как бы вы реализовали Ruby-блоки / Java-замыкания в C?