为什么我的子类一直说它没有初始化?

时间:2016-01-27 05:10:16

标签: ruby class subclass

为什么我一直收到一个NameError,说我CherryCherry.new是未初始化的常量?我还没有精通创建子类。

class Red
  def initialize(options = {})
    @options = options
  end

  def instance_method_a
    return @options[:a] if @options.has_key?(:a)
    if @options.has_key?(:b)
      #mathy code
    end
  end

  def instance_method_b
    return @options[:b] if @options.has_key?(:b)
    if @options.has_key?(:a)
      #mathy code
    end
  end

  class Cherry < Red
    def initialize(var)
      self.new(:a => var)
    end
  end

  class Vermillion < Red
    def initialize(var)
      self.new(:b => var)
    end
  end
end

我确信Vermillion将会像未初始化一样。我需要能够为这些子类分配变量以通过实例方法运行它们。我怎样才能让它们起作用?

2 个答案:

答案 0 :(得分:2)

您需要使用参数调用super来调用基类的initialize方法。

  class Cherry < Red
    def initialize(var)
      super(:a => var)
    end
  end

此外,您的子类在主类中被命名空间。您需要使用命名空间调用它们。

Red::Cherry.new(something: "here")

答案 1 :(得分:0)

  

为什么我一直NameErrorSubclass_A是未初始化的常量?

简单:代码中没有Subclass_A