我有以下三个课程:
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
。
有人可以告诉我我在做什么错吗?
答案 0 :(得分:4)
尝试:
@template.is_a?(MessengerTemplate)
如docs中所述:
如果 class 是 obj 的类,或者 class 是 obj 返回true >或 obj 中包含的模块。
MessengerTemplate
是@template
的超类,因此是@template.is_a?(MessengerTemplate) => true
。