Crystal .cycle Recycle после завершения цикла

Так в моем случае

def dynamic_data()
  data = [] of String
  # some data from db
  # data << db["somekey"].to_s
  return data
end

dynamic_data().cycle do |d|
  # some stuff
  puts d
end

Мои данные достигают более 500 строк и будут продолжать расти и увеличиваться, как сначала сделать цикл завершения цикла, затем снова загрузить новые данные из функции, или есть другой метод?, Спасибо

1 ответ

Решение

как сделать cycle завершающий цикл первым

Там нет способа сделать Array#cycle отделка, так как она явно предназначена для вечной работы (если break называется, но это вряд ли то, что вы ищете).

Если я правильно понял ваше намерение, вы пытаетесь обработать входящие порции данных. Для этого требуется более сложная обработка, например:

class DataHandler
  def initialize
    @data = []
  end
  def data()
    @data.tap(&:clear)
  end
  def data!(new_data)
    @data << new_data
  end
end

data_handler = DataHandler.new

loop do
  break "empty data" if data_handler.data.empty?
  puts data_handler.data
end

Или, как указано в комментариях Джонн Хас, используя yield:

def dynamic_data()
  data = []
  loop do
    data << new_data
    yield data.tap(&:clear) if data.size > 100
  end
end

dynamic_data do
  puts d
end
Другие вопросы по тегам