Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 覆盖is_a的正确方法是什么?还有什么?_Ruby - Fatal编程技术网

Ruby 覆盖is_a的正确方法是什么?还有什么?

Ruby 覆盖is_a的正确方法是什么?还有什么?,ruby,Ruby,ruby 1.8.7(2010-12-23 patchlevel 330)[i686-darwin10.5.0] 我错过什么了吗 module Mixin def is_a?(o) return false if o == Hash super end alias_method :kind_of?, :is_a? end class Doc < Hash include Mixin end puts Doc.new().is_a?(Doc) # =>

ruby 1.8.7(2010-12-23 patchlevel 330)[i686-darwin10.5.0]

我错过什么了吗

module Mixin
  def is_a?(o)
    return false if o == Hash
    super
  end
  alias_method :kind_of?, :is_a?
end

class Doc < Hash
  include Mixin
end

puts Doc.new().is_a?(Doc) # => true
puts Doc.new().kind_of?(Doc) # => super: no superclass method `is_a?'

感谢大家,rubinius和ruby 1.9.2p136上的一切都很酷。这是1.8.7中的一个bug

也许它会在一分钟内击中我,但如果您能解释一下您希望看到的内容,并指出与此不同的部分,这会有所帮助。我看不出你的Mixin对你正在测试的代码有什么影响,也看不出你的自定义
Doc2\u是一个什么样的方法有什么不同。你永远不会把一个杂碎传进来!我没有得到super:没有超类方法;我用Ruby 1.9.2打印了四个
true`值。你使用的是什么版本的Ruby?1.8.7.“我遗漏了什么吗?”是的。当你运行它和你想要接收的东西时,你可以考虑使用.<代码>响应子> 来询问一个对象能做什么,而不是它是什么对象。
puts Doc.new().is_a?(Doc) # => true
puts Doc.new().kind_of?(Doc) # => true
puts Doc.new().is_a?(Hash) # => false
puts Doc.new().kind_of?(Hash) # => false