8

在 Sinatra 中,我可以测试 some_object.class.name == "Hash"。现在,在提交之后,我必须对此进行测试,加上 == "ActiveSupport::HashWithIndifferentAccess",我的代码才能正常工作。为什么会这样,我是否必须更新发生这种比较的所有地方,还是有更简单的方法?谢谢

4

1 回答 1

21

来自ActiveSupport::HashWithIndifferentAccess上的文档:

这个类有可疑的语义,我们只有这样才能让人们写 params[:key] 而不是 params['key'] 并且他们为两个键获得相同的值。

因此,它是一个继承自 Hash 的类,允许您将符号或字符串作为键传递并返回相同的值。

要修复(和清理)您的测试,您可以使用以下内容:

some_object.is_a? Hash

如果它是 Hash 或 Hash 的后代,这将返回 true。

于 2012-06-20T22:56:15.677 回答