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

时间:2018-07-31 23:53:15

标签: ruby-on-rails ruby

我有以下三个课程:

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 个答案:

答案 0 :(得分:4)

尝试:

@template.is_a?(MessengerTemplate)

docs中所述:

  如果 class obj 的类,或者 class obj 返回true >或 obj 中包含的模块。

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