Ruby 听说 Ruby 的宏很强大,能实现类似 GOTO 的功能吗?

zzz6519003 · 2023年06月18日 · 最后由 sevk 回复于 2023年10月26日 · 809 次阅读

THOUGH,荷兰学者 E.W.Dijkstra 提出了程序设计中常用的 GOTO 语句的三大危害:破坏了程序的静动一致性;程序不易测试;限制了代码优化

哪家语言教程还在推 goto 语句,拉走

不需要宏,ruby 本身就有 callcc https://ruby-doc.org/core-3.0.0/Continuation.html ,當然你要宏也是可以的,我指的是先 parse 再改 ast 的宏

楼上说的对。Roda 里面就用了很多 catch、throw

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

ruby 老爹?哈哈哈

mizuhashi 回复

callcc 我都没理解意思

lambda, eval ,proc , 元编,这些功能已经很强大了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号