需要知道如何在ruby中处理散列键

时间:2009-11-11 23:10:39

标签: ruby-on-rails ruby

我正在研究ruby rails项目。我正在使用Rails 2.3.4和ruby 1.8.7。我有一个名为User的模型。

我在初始化程序中有以下代码

$h =  {User => 'I am user' }

在控制器中我有以下代码

$h[User]

第一次当我做[用户]时,我得到了正确的结果。但是,如果我刷新页面,那么我得到零值。

我认为这就是正在发生的事情。

第一次加载User类时,我得到了正确的值。但是,当我刷新页面时,此时间控制器返回$ h [User]的nil值。

因为rails在刷新页面时会卸载所有常量,所以似乎加载了一个新的User类。此User类与初始化程序中用作键的User不同。

我知道使用User类是一种不好的做法。我的问题是,有人可以在用户类作为密钥时向我解释,然后在内部如何ruby存储密钥。 ruby是否使用User的object_id作为密钥?我

2 个答案:

答案 0 :(得分:4)

Hash在用作键的任何对象上调用hash方法。是的,关于你的代码无法正常工作的理论是正确的。

在Rails控制台中试试这个:

User.hash # => 215678765 (or whatever)
reload! 
User.hash # => 215876673

重新加载类会更改hash方法返回的值,这意味着它在Hash中使用时不再是相同的键。

每次使用:user或其他会解析为同一密钥的内容。

答案 1 :(得分:0)

在用作哈希中的键的每个对象上使用hash方法。