Crystal .cycle 循环结束后回收
Crystal .cycle Recycle after finish looping
所以就我而言
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多行,还会继续增长和增加,如何先循环结束循环,然后从函数重新加载新数据,或者有其他方法吗? , 谢谢
how to make cycle
finishing loop first
没有办法让 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
或者,正如 Jonne Haß 在评论中指出的那样,使用 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
所以就我而言
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多行,还会继续增长和增加,如何先循环结束循环,然后从函数重新加载新数据,或者有其他方法吗? , 谢谢
how to make
cycle
finishing loop first
没有办法让 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
或者,正如 Jonne Haß 在评论中指出的那样,使用 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