代码之家  ›  专栏  ›  技术社区  ›  Joel

用Ruby伪造一个类型?

  •  1
  • Joel  · 技术社区  · 15 年前

    给定下面的Ruby代码,并且给定我有一个Klass实例,我如何在我的Klass实例上调用do_-stuff方法。我想把我的克劳斯实例投射到克劳斯。我知道类型转换这在Ruby中是不可能的-有没有一种方法可以伪造它?

    class Klass
      ...
    end
    
    class Subklass < Klass
      ...
      def do_stuff
        ...
      end
    end
    
    inst = Klass.new
    inst.magically_convert_to_subklass_instance # Need help here
    inst.do_stuff
    
    1 回复  |  直到 15 年前
        1
  •  2
  •   Anero    15 年前

    继承不是这样的。如果您有一个Klass实例,则不能以任何方式将其强制转换为Subklass。 要共享这样的代码,您最好使用一个模块来定义do-stuff方法,将模块中的特性附加到klass中。 即。:

    module StuffModule
      def do_stuff
        print "do stuff"
      end
    end
    
    class Klass
    include StuffModule
    end
    
    inst = Klass.new
    inst.do_stuff
    
    推荐文章