我不确定 subroutine 是否是正确的词。但是我想知道您是否可以编写可以来回跳转的代码块?
例如,如果我想要一个包含 3 块代码的程序
Block1
Block2
Block3
在 Block1 内它说
if something == 1
go to Block2
end
这可能吗?
谢谢!
我不确定 subroutine 是否是正确的词。但是我想知道您是否可以编写可以来回跳转的代码块?
例如,如果我想要一个包含 3 块代码的程序
Block1
Block2
Block3
在 Block1 内它说
if something == 1
go to Block2
end
这可能吗?
谢谢!
Ruby 没有“goto”。通常的做法是使用方法(子程序):
def block1
puts "foo"
end
def block2
puts "bar"
end
if something == 1
block1
block2
end
# => foo
# => bar
想要“goto”的一个常见原因是实现状态引擎。在 Ruby 中,使用简单的 case 语句可以轻松创建小型状态引擎:
state = :init
loop do
case state
when :init
puts "init"
state = :working
when :working
puts "working"
state = :done
when :done
puts "done"
break
end
end
# => init
# => working
# => done
您可以-DSUPPORT_JOKE
使用(参见这篇文章)重新编译 Ruby ,但我不推荐它;-)
另请参阅此问题:Ruby 中的 goto 命令?
好吧,在 Ruby 中,子例程只是作为块或方法实现的,它们接近于绑定到对象的块。但是,跳来跳去你说,你可能不是在谈论子例程,而是在谈论协程。这些在 Ruby 中由 Fibers 表示。