我不确定子程序是否是正确的单词。但我想知道你是否可以做一些你可以来回跳过的代码块?
例如,如果我想拥有一个包含3个代码块的程序
Block1
Block2
Block3
在Block1中它说
if something == 1
go to Block2
end
这可能吗?
谢谢!
答案 0 :(得分:3)
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
答案 1 :(得分:2)
你可以使用-DSUPPORT_JOKE
重新编译Ruby(参见this post),但我不推荐它; - )
另请参阅此问题:goto command in Ruby?
答案 2 :(得分:1)
好吧,在Ruby中,子程序只是作为块或方法实现,它们接近绑定到对象的块。但是,你来回来回说,你可能不是在谈论子程序,而是COroutines。在Ruby中,这些是represented by Fibers。