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

zzz6519003 · June 18, 2023 · Last by sevk replied at October 26, 2023 · 770 hits

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

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

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

catch/throw

楼上说的对。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 老爹?哈哈哈

Reply to mizuhashi

callcc 我都没理解意思

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

You need to Sign in before reply, if you don't have an account, please Sign up first.