ruby-on-rails - 检查子类是否是父类的实例
问题描述
我有以下三个课程:
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
。
有人可以告诉我我在这里做错了什么吗?
解决方案
尝试:
@template.is_a?(MessengerTemplate)
如文档中所述:
如果class是obj的类,或者class是obj的超类之一或obj中包含的模块,则返回 true 。
MessengerTemplate
是 的超类@template
,因此@template.is_a?(MessengerTemplate) => true
.
推荐阅读
- user-interface - 如何在 UI 上显示 apache 光束管道图
- android - 为什么我的文字一碰到多行就会被删掉?
- java - Java中的int[]排序算法到T[]
- apache-kafka - Confluent Schema Registry“主题”和“版本”
- javascript - 无法更改按钮单击时的文本颜色
- javascript - 如何删除 HTML / CSS 中选定选项卡的边框?
- c - Makefile 用 main 函数编译许多程序,但只有一个 makefile 错误
- reactjs - 路由错误,如何解决?
- java - Scala 中的 Java 方法的别名
- c++ - 为什么在这种情况下 x = 44?