我有以下查询类,其行为类似于枚举器
class Query
include Enumerable
# ...
def each(&block)
@results.each do |id|
yield @repo.find(id)
end
end
end
使用上面的代码,我可以构建以下循环:
query_all.each do |x|
...
query_all.each_with_index(1) do |x, idx|
只需定义每个功能,我就可以免费获得 each_with_index 。但是,我无法工作的是:
query_all.each.with_index(1) do |x, idx|
puts x
end
Failure/Error: query_all.each.with_index(1) do |tag, idx|
LocalJumpError:
no block given (yield)
据我所知, LocalJumpError 通常与丢失的块(我提供的)相关,所以我不确定我的每个>是否缺少某些参数,或者如果这次我必须定义一个新函数。
答案 0 :(得分:2)
之所以发生这种情况,是因为您在each
内部定义了一个块,它会在内部产生。每个都可以在没有块的情况下调用(这是你正在做的事情)。如果在没有块的情况下调用该方法,则应该返回每个结果(不调用块)。
class Query
include Enumerable
# ...
def each(&block)
results = @results.map {|id| @repo.find(id)}
if block
results.each(&block)
else
results.each
end
end
end