如何从ruby-progressbar实例获取count和total值?是否遗漏方法?
解决ruby-progressbar实例访问count和total的问题
你完全没搞错直觉!ruby-progressbar确实为count和total提供了直接访问的方式,而且increment方法也会返回更新后的当前计数,只是可能没注意到gem的这些内置方法而已。
1. 直接访问count和total属性
ProgressBar实例默认通过attr_reader暴露了这两个属性,你可以直接用pb.count获取当前已完成的计数,pb.total获取任务的总数量:
# 创建进度条后,随时可以查看 puts "当前完成: #{pb.count}" puts "总任务数: #{pb.total}"
2. 利用increment的返回值终止循环
increment方法在每次调用后,会返回更新后的count值,你可以接收这个返回值,用来判断是否提前终止循环。比如你想迭代10次就停下,代码可以这么写:
require 'ruby-progressbar' pb = ProgressBar.create( title:'Items', total:500, remainder_mark:'.', format:'%t |%B| %c of %C %p%%', length:80 ) 500.times do |x| current_count = pb.increment # 测试逻辑:完成10次就终止循环 break if current_count >= 10 # 这里替换成你的实际业务操作 sleep 0.05 # 模拟耗时任务 end
当然,你也可以不依赖返回值,直接在循环里检查pb.count:
500.times do |x| pb.increment break if pb.count >= 10 # ...业务逻辑 end
额外小提示
如果有特殊需要,gem还提供了count=和total=的写方法,可以手动修改这两个值,但一般情况下只读访问就足够满足需求了。
内容的提问来源于stack exchange,提问作者donvnielsen
相关产品推荐
相关产品推荐

