我試圖保留一個本地散列函數,該函數可以記住函數調用之間的狀態。但是我不知道如何在沒有關閉的情況下聲明它(如同一些用戶在類似的線程中所建議的那樣)。在ruby中,我該如何聲明C++等價的「靜態」函數變量?
我知道C++比紅寶石更徹底,並在C++中,我會通常被使用的static
局部變量,像在第一個例子在這裏:http://msdn.microsoft.com/en-us/library/s1sb61xd.aspx
我設法在紅寶石使用defined?
功能一起砍東西:
def func x
if not defined? @hash
@hash = Hash.new
end
if @hash[x]
puts 'spaghetti'
else
@hash[x] = true
puts x.to_s
end
end
func 1
func 1
這打印,下面,這是我想要的。唯一的問題是@hash
可以在該函數之外訪問。
1
spaghetti
是否有任何「更清潔」,更喜歡用這種行爲聲明變量的方法(沒有工廠)?我打算創建兩個或三個變量,如@hash
,所以我正在尋找一個更好的方式來簡潔地表達這一點。
你真的想要做什麼?將C++解決方案轉譯成Ruby可能不是一個好主意。將你的「靜態局部函數」包裝在一個單獨的對象中可能更有意義。 – 2012-02-11 06:20:55
在我的實際問題中,我寫了一個函數'generate_prime n',它生成第n個素數,而另一個函數'prime?檢查它的論點是否是主要的。這兩個函數都會有很多重複的參數,所以我試圖在Hashes/Bignum對象中緩存一些結果。 – 2012-02-11 07:20:51