【发布时间】:2014-03-11 23:31:40
【问题描述】:
我想从一个函数返回一个多行代码块,由另一个函数执行
例如
def foo
return #block
end
def bar(&block)
block.call
end
bar(foo)
有人知道怎么做吗? 红宝石 1.9.3
【问题讨论】:
-
你想做什么?可能有更好的方法。
我想从一个函数返回一个多行代码块,由另一个函数执行
例如
def foo
return #block
end
def bar(&block)
block.call
end
bar(foo)
有人知道怎么做吗? 红宝石 1.9.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
【讨论】:
你可以返回一个Proc对象:
def foo
return Proc.new { ... }
end
def bar(block)
block.call
end
bar(foo)
Here 是活生生的例子。
【讨论】:
def foo
Proc.new {
# code here
}
end
不用return,它是隐式的。
【讨论】:
return 语句,他们错过了一些方法返回他们不期望的结果(尤其是 before_save 挂钩中的常见错误)