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) 」。我們希望看到你的努力的證據。你嘗試了什麼?你搜索並沒有找到任何東西?你有沒有找到東西,但它沒有幫助?你有沒有嘗試寫代碼?如果不是,爲什麼?如果是這樣,那麼最小的代碼示例顯示了您嘗試的內容以及它爲什麼不起作用?沒有它,看起來你沒有嘗試並希望我們爲你寫信。 –