我想写一个在一个地方产生值的方法,并将其作为参数传递给另一个方法,该方法将用块调用它。我确信这是可以做到的,但不知怎么的,我找不到正确的语法。
下面是一些示例(非工作)代码来说明我试图实现的目标:
def yielder
yield 1
yield 2
yield 3
end
def user(block)
block.call { |x| puts x }
end
# later...
user(&yielder)
$ ruby x.rb
x.rb:2:in `yielder : no block given (yield) (LocalJumpError)
from x.rb:12:in `<main>
FWIW,在我的真实代码中,yielder和user属于不同的类。
更新
谢谢你的回答。正如Andrew Grimm提到的,我希望迭代器方法采用参数。我最初的例子省略了这个细节。这个代码段提供了一个迭代器,该迭代器计数到给定的数字。为了使它发挥作用,我明确了内部块。它做了我想做的事,但有点难看。如果有人能在这方面有所改进,我会很有兴趣看看如何改进。
def make_iter(upto)
def iter(upto, block)
(1 .. upto).each do |v|
block.call(v)
end
end
lambda { |block| iter(upto, block) }
end
def user(obj)
obj.call Proc.new { |x| puts x }
end
# later...
user(make_iter(3))