我试图保留一个本地散列函数,该函数可以记住函数调用之间的状态。但是我不知道如何在没有关闭的情况下声明它(如同一些用户在类似的线程中所建议的那样)。在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