2013-12-22 3 views
-2

Это может показаться немного глупым. Но я пытаюсь использовать ключевое слово 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

Что вы хотите сказать? – sawa

+0

Вопрос состоял в том, чтобы перебирать значение date_range с помощью настраиваемого блока. – swapab

+1

вниз избирателей пожалуйста, поддержите с комментарием – swapab

ответ

2

Итерации объекта Range с использованием Range#each и получения каждого элемента.

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 должен быть строкой. 2013-12-31 - 1970.

+0

Спасибо, я в конце концов поцарапал свой мозг, чтобы поработать с ним – swapab

+0

Это сообщение помогло мне http://stackoverflow.com/questions/16343103/how-do-i-write-my-own-loop-until – swapab

0

Я был в состоянии сделать это с

def between(&block) 
    (start_date..end_date).map do |date| 
    yield date 
    end 
end 
+0

С 'Range # map' вы фактически создаете лишний экземпляр' Array' со значениями из вашего диапазона. Вы определенно хотите использовать итерацию 'Range # each' здесь. – mudasobwa

+0

@mudasobwa получил вашу мысль. Благодаря! – swapab

Смежные вопросы