0
A
回答
3
我可能会做这种方式:
class EverreadyBunnyCounter
def initialize
@counter = 0
end
def current
@counter
end
def next
@counter += 1
end
end
foo = EverreadyBunnyCounter.new
bar = EverreadyBunnyCounter.new
foo.next # => 1
bar.next # => 1
foo.next # => 2
bar.current # => 1
的current
方法是没有必要的,但它有时方便,能够在当前值偷看不强迫它递增。
或者,这可能做到这一点:
MAX_INT = (2**(0.size * 8 -2) -1)
counter = (1..MAX_INT).to_enum # => #<Enumerator: 1..4611686018427387903:each>
foo = counter.dup
bar = counter.dup
foo.next # => 1
foo.next # => 2
bar.next # => 1
bar.next # => 2
foo.next # => 3
定义MAX_INT
这样来自于 “Ruby max integer”。缺点是最终会因为用于创建枚举器的范围而耗尽值,其中使用EverreadyBunnyCounter
类的以前版本将继续进行。
更改MAX_INT
到Float::INFINITY
将是解决这个问题的方式:
counter = (1..Float::INFINITY).to_enum # => #<Enumerator: 1..Infinity:each>
foo = counter.dup
bar = counter.dup
foo.next # => 1
foo.next # => 2
bar.next # => 1
bar.next # => 2
foo.next # => 3
的Enumerator documentation有更多的信息。
2
是这样的吗?
def incr
@n ||= 0
@n += 1
end
incr
#=> 1
incr
#=> 2
+0
我来自Python,并试图了解一点关于Ruby,所以忍受我,但这个clobbers对象名称空间,不是?可能有一个闭包的方法有点“更清洁”:[原谅我敢肯定的是可怕的单一代码](https://repl.it/HJCe/1) –
+1
为什么会打开Object命名空间? –
相关问题
- 1. 从功能静态变量
- 2. 添加一个计数器功能
- 3. ruby中的静态变量
- 4. 增加一个额外的两个变量来计数模拟器功能
- 5. 如何为动态“每个”功能使用静态变量?
- 6. 实现根计算功能
- 7. 不能够比较一个JavaScript变量
- 8. 类的其他实例是否能够访问另一个类中的静态变量?
- 9. 实现计算器使用状态的存储/调用功能
- 10. PHP:引用静态变量中的另一个静态变量
- 11. 使用动态和静态调度来实现特征实现者的功能
- 12. 功能局部静态变量唯一ID生成
- 13. 如何计时功能添加到一个变量迅速
- 14. 实现一个静态NSOutlineView
- 15. Ruby 1.8.7中的静态循环变量
- 16. 声明静态常量在功能
- 17. 布点,不能够实现
- 18. 试图访问另一个静态变量的静态变量
- 19. 如何停止打印现实世界“计数器”的计数器功能?
- 20. 非静态变量不能从静态上下文中引用
- 21. “不能从静态上下文中引用非静态变量”?
- 22. 能够执行静态类的方法遵循一个代表
- 23. 静态变量不保留其功能内的值
- 24. 不能够实现这个XML
- 25. C#实用功能静态方法/静态类/单身模式
- 26. 如何加载变量并能够添加到变量?
- 27. 带一个功能的计算器
- 28. 精心设计一个函数参数作为静态变量
- 29. 非静态变量当实例化一个新对象时,不能从静态上下文问题中引用
- 30. 同一类中的Java静态变量和非静态变量
请阅读“[问]”,包括链接页面,“[mcve]”和“[Stack Overflow用户需要多少研究工作?](http://meta.stackoverflow.com/questions/261592) ”。我们希望看到你的努力的证据。你尝试了什么?你搜索并没有找到任何东西?你有没有找到东西,但它没有帮助?你有没有尝试写代码?如果不是,为什么?如果是这样,那么最小的代码示例显示了您尝试的内容以及它为什么不起作用?没有它,看起来你没有尝试并希望我们为你写信。 –