听起来有点愚蠢。但我正在尝试使用yield
关键字来创建自定义循环。
DateRange.new('2013-12-1', '2013-12-31').between do |date|
puts date
end
应该导致
2013-12-1
2013-12-2
...
DateRange 类看起来像
class DateRange
attr_accessor :start_date, :end_date
def initialize(start_date, end_date)
@start_date = Date.parse(start_date.to_s)
@end_date = Date.parse(end_date.to_s)
end
def between(&block)
yield (start_date..end_date)
end
end
问题是使用自定义块
迭代date_range
答案 0 :(得分:2)
使用Range#each迭代Range
对象,并生成每个项目。
require 'date'
class DateRange
attr_accessor :start_date, :end_date
def initialize(start_date, end_date)
@start_date = Date.parse(start_date.to_s)
@end_date = Date.parse(end_date.to_s)
end
def between(&block)
(start_date..end_date).each { |x|
yield x
}
# OR
# (start_date..end_date).each &block
end
end
DateRange.new('2013-12-1', '2013-12-31').between do |date|
puts date
end
BTW DateRange.new
的第二个参数应该是String。 2013-12-31
为1970
。
答案 1 :(得分:0)
我能够用
做到这一点def between(&block)
(start_date..end_date).map do |date|
yield date
end
end