首页 > 解决方案 > 检查子类是否是父类的实例

问题描述

我有以下三个课程:

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#initializeMessengerTemplate. 如果没有,我需要抛出一个错误。

当我打电话时:

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

构造函数中的以下行:

puts @template.instance_of? MessengerTemplate

打印FALSE

有人可以告诉我我在这里做错了什么吗?

标签: ruby-on-railsruby

解决方案


尝试:

@template.is_a?(MessengerTemplate)

文档中所述:

如果classobj的类,或者class是obj的超类之一或obj中包含的模块,则返回 true 。

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


推荐阅读