我正在尝试了解以下rails控制器的方法
def self.collect_with_max_id(collection=[], max_id=nil, &block)
response = yield(max_id)
collection += response
response.empty? ? collection.flatten : collect_with_max_id(collection, response.last.id - 1, &block)
end
当尝试使用byebug调试方法时,我获取所有对象集合和max_id的值: 我被困在这部分
response = yield(max_id)
虽然max_id为552860227390144512,但在调用响应变量时,我只是得到一个空数组[],它似乎打破了整个方法。
有人可以在此上下文中解释yield函数。我现在只能在ror中渲染视图和块。
答案 0 :(得分:0)
yield
是ruby中的关键字,用于执行给予方法的块。
def foo
yield 'Hi 1'
yield 'Hi 2'
end
foo { |string| puts string }
# Hi 1
# Hi 2
在你的情况下,块也被带入变量&block
,所以你可以做一个递归:
def bar(i = 1, &block)
return if i <= 0
yield(i) # or you can do block.call(i)
bar(i - 1, &block)
end
bar(3) { |i| puts "I am called with #{i}" }
该方法因最后一行而停止递归。您询问response.empty?
是否以及是否返回collection.flatten
tl&amp; dr在几个月内忘记了rails并学习了ruby语言,否则你将会处于一个受伤的世界。