计算 Enumerable 循环上的迭代次数

2023-12-10

我想使用像这样的枚举器[1,2,3].cycle并计算我经历了多少次迭代。[1,2,3].cycle.count创建无限循环并且不带来迭代计数。我正在玩纸牌游戏,它会在玩家之间循环。在游戏中很容易说:

@round = 0
if @turn == 1
  @round += 1
end

它有效。但我想知道如何改变count or add iter仅适用于具有cycle变成这样的东西:

module Enumerable
  def cycle  
    super
    def count
      puts "Hi"
    end  
  end  
end  

由于 Ruby 中的所有内容都是对象,因此我应该能够在函数内创建函数,就像本例一样:

def x
  def y
    puts 1
  end
end
x.y
# => 1

我怎样才能覆盖的行为count仅在一个cycle枚举器或至少创建一个工作方法itercycle枚举器?


你可以很容易地将类似的东西组合在一起。就像是

class Iter < Array
  attr_reader :iteration

  def initialize(*args)
    super(*args)
    @pointer = 0
    @iteration = 1 # Current iteration
  end

  def next
    self[@pointer].tap {
      @pointer = (@pointer + 1) % size
      @iteration += 1 if @pointer == 0
    }
  end
end

iter = Iter.new [1,2,3]

7.times { puts 'iteration %d: %d' % [iter.iteration, iter.next] }

# iteration 1: 1
# iteration 1: 2
# iteration 1: 3
# iteration 2: 1
# iteration 2: 2
# iteration 2: 3
# iteration 3: 1    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算 Enumerable 循环上的迭代次数 的相关文章

随机推荐