THOUGH,荷兰学者 E.W.Dijkstra 提出了程序设计中常用的 GOTO 语句的三大危害:破坏了程序的静动一致性;程序不易测试;限制了代码优化
不需要宏,ruby 本身就有 callcc https://ruby-doc.org/core-3.0.0/Continuation.html ,當然你要宏也是可以的,我指的是先 parse 再改 ast 的宏
ruby 老爹的书上有例子啊,模拟 basic
$lines = {}
def line(symbol)
callcc {|c| $lines[symbol] = c}
end
def goto(symbol)
$lines[symbol].call
end
i = 1
line 10
puts i += 1
goto 10 if i < 5
line 20
puts i -= 1
goto 20 if i > 0