我想使用像这样的枚举器[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
枚举器或至少创建一个工作方法iter
内cycle
枚举器?
你可以很容易地将类似的东西组合在一起。就像是
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(使用前将#替换为@)