Crystal .cycle完成循环后循环

时间:2017-08-29 06:43:44

标签: loops crystal-lang

所以在我的情况下

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 个答案:

答案 0 :(得分: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

或者,正如JonneHaß在评论中指出的那样,使用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