Ruby:如何做子程序?

时间:2012-10-12 11:55:22

标签: ruby

我不确定子程序是否是正确的单词。但我想知道你是否可以做一些你可以来回跳过的代码块?

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

Block1
Block2
Block3

在Block1中它说

if something == 1
 go to Block2
end

这可能吗?

谢谢!

3 个答案:

答案 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