我想从一个函数返回一个多行代码块,由另一个函数执行
例如
def foo
return #block
end
def bar(&block)
block.call
end
bar(foo)
有人知道怎么做吗? Ruby 1.9.3
答案 0 :(得分:3)
您需要创建一个Proc。有几种方法可以创建它们 - 主要是proc
,lambda
和->
。您只需将块传递给其中一个函数,它就会将块包装在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)
答案 2 :(得分:1)
def foo
Proc.new {
# code here
}
end
无需使用return,这是隐含的。