3

我不确定 subroutine 是否是正确的词。但是我想知道您是否可以编写可以来回跳转的代码块?

例如,如果我想要一个包含 3 块代码的程序

Block1
Block2
Block3

在 Block1 内它说

if something == 1
 go to Block2
end

这可能吗?

谢谢!

4

3 回答 3

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
于 2012-10-12T12:09:02.220 回答
2

可以-DSUPPORT_JOKE使用(参见这篇文章)重新编译 Ruby ,但我不推荐它;-)

另请参阅此问题:Ruby 中的 goto 命令?

于 2012-10-12T13:52:07.757 回答
1

好吧,在 Ruby 中,子例程只是作为块或方法实现的,它们接近于绑定到对象的块。但是,跳来跳去你说,你可能不是在谈论子例程,而是在谈论协程。这些在 Ruby 中由 Fibers 表示

于 2012-10-12T14:01:25.043 回答