【发布时间】:2012-06-23 03:58:09
【问题描述】:
在 Sinatra 中,我可以测试 some_object.class.name == "Hash"。现在,在提交之后,我必须对此进行测试,加上 == "ActiveSupport::HashWithIndifferentAccess",我的代码才能正常工作。为什么会这样,我是否必须更新发生这种比较的所有地方,还是有更简单的方法?谢谢
【问题讨论】:
标签: ruby-on-rails hash
在 Sinatra 中,我可以测试 some_object.class.name == "Hash"。现在,在提交之后,我必须对此进行测试,加上 == "ActiveSupport::HashWithIndifferentAccess",我的代码才能正常工作。为什么会这样,我是否必须更新发生这种比较的所有地方,还是有更简单的方法?谢谢
【问题讨论】:
标签: ruby-on-rails hash
来自ActiveSupport::HashWithIndifferentAccess 上的文档:
这个类有可疑的语义,我们只使用它以便人们可以编写 params[:key] 而不是 params['key'] 并且他们为两个键获得相同的值。
因此,它是一个继承自 Hash 的类,允许您将符号或字符串作为键传递并返回相同的值。
要修复(和清理)您的测试,您可以使用以下内容:
some_object.is_a? Hash
如果它是 Hash 或 Hash 的后代,这将返回 true。
【讨论】: