为了检查@some_var
是什么,我正在做一个
if @some_var.class.to_s == 'Hash'
我相信有一种更优雅的方法来检查@some_var
是Hash
还是Array
。
发布于 2011-03-20 14:30:38
你可以这样做:
@some_var.class == Hash
或者像这样的东西:
@some_var.is_a?(Hash)
值得注意的是,"is_a?“如果类位于对象祖先树中的任何位置,则方法为true。例如:
@some_var.is_a?(Object) # => true
如果@some_var是源自Object的散列或其他类的实例,则上述情况成立。那么,如果您希望严格匹配类类型,使用==还是instance_of?方法可能就是您要找的。
发布于 2013-05-29 23:17:38
首先,文字问题的最佳答案是
Hash === @some_var
但是这个问题真的应该在这里通过展示如何进行鸭子打字来回答。这有点取决于你需要什么样的鸭子。
@some_var.respond_to?(:each_pair)
或
@some_var.respond_to?(:has_key?)
甚至是
@some_var.respond_to?(:to_hash)
根据应用程序的不同可能是正确的。
发布于 2011-03-20 14:36:59
通常在ruby中,当你寻找"type“时,你实际上想要的是"duck-type”或“is quack like a duck?”。您将看到它是否响应特定的方法:
@some_var.respond_to?(:each)
您可以遍历@some_var,因为它响应:each
如果你真的想知道类型,如果它是Hash或Array,那么你可以这样做:
["Hash", "Array"].include?(@some_var.class) #=> check both through instance class
@some_var.kind_of?(Hash) #=> to check each at once
@some_var.is_a?(Array) #=> same as kind_of
https://stackoverflow.com/questions/5367114
复制相似问题