2011-02-04 12 views
3

ルビー1.8.7(2010-12-23パッチレベル330)[i686-darwin10.5.0]is_aを無効にする適切な方法は何ですか?とkind_of?

私に何か不足していますか?

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?' 

予想:

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 

すべてがRubiniusのルビー誰にでも1.9.2p136

+0

おそらく、それは分で私を打つでしょうが、あなたが見たいものを説明し、それとは異なる部分を指摘すれば助けになるでしょう。 Mixinがテストしているコードにどのような影響を与えているのか、独自の 'Doc2#is_a? 'メソッドがどのように違いを見ているのか分かりません。ハッシュを渡すことは決してありません! – Phrogz

+0

私は '#=> superを取得しません:スーパークラスのメソッドは' is_a? '';私はRuby 1.9.2で4つの 'true'値を出力します。どのバージョンのRubyを使用していますか? 1.8.7? – Phrogz

+1

「私は何かが欠けていますか?」はい。あなたがそれを実行するときに得られるものの例と、代わりに受け取ってもらいたいものの例。 –

答えて

関連する問題