代码之家  ›  专栏  ›  技术社区  ›  Cannon Moyer

检查子类是否为父类的实例

  •  0
  • Cannon Moyer  · 技术社区  · 7 年前

    我有以下三门课:

    class MessageBuilder
       def initialize(template)
           @template = template
           puts @template.instance_of? MessengerTemplate 
       end
    end
    
    class MessengerTemplate
        def initialize
            @default_template_id = "111111"
        end
    end
    
    class JobTemplate < MessengerTemplate
        def initialize(name)
            @name = name
            @template_id = "2222"
        end
    end
    

    我正在检查参数是否传递到 MessageBuilder#initialize 是的一个实例 MessengerTemplate . 如果不是,我需要抛出一个错误。

    当我呼唤:

    message = MessageBuilder.new(JobTemplate.new("Invoice"))
    

    构造函数中的以下行:

    puts @template.instance_of? MessengerTemplate
    

    印刷品 FALSE .

    有人能告诉我我这里做错了什么吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   jvillian    7 年前

    尝试:

    @template.is_a?(MessengerTemplate)
    

    正如在 docs :

    返回true 是类 OBJ ,或者,如果 是的超类之一 OBJ 或包含在 OBJ .

    MessengerTemplate 是一个超类 @template 因此 @template.is_a?(MessengerTemplate) => true .