我如何在ruby中返回一段代码

时间:2014-03-11 23:31:40

标签: ruby return block

我想从一个函数返回一个多行代码块,由另一个函数执行

例如

def foo 
  return #block
end

def bar(&block)
  block.call
end

bar(foo)

有人知道怎么做吗? Ruby 1.9.3

3 个答案:

答案 0 :(得分:3)

您需要创建一个Proc。有几种方法可以创建它们 - 主要是proclambda->。您只需将块传递给其中一个函数,它就会将块包装在Proc对象中。 (三种方法处理论证的方式有细微差别,但你通常不需要关心。)所以你可以这样写:

def foo 
  proc { puts "Look ma, I got called!" }
  # you don't need the return keyword in Ruby -- the last expression reached returns automatically
end

def bar(&block)
  block.call
end

bar(&foo) # You need the & operator to convert the Proc back into a block

答案 1 :(得分:2)

您可以返回Proc对象:

def foo
    return Proc.new { ... }
end

def bar(block)
    block.call
end

bar(foo)

Here是实例。

答案 2 :(得分:1)

def foo 
  Proc.new {
    # code here
  } 
end

无需使用return,这是隐含的。