我正在尝试创建枚举 - 就像java模拟。我有这个模块。
module Enum
def self.included(base)
super
base.extend(Enum)
base.private_class_method :new
end
def enum(key, fields = {}, &class_body)
value = Class.new(self) do
fields.each_with_index do |item, i|
define_singleton_method(item.first.to_s.downcase) { item.last }
define_singleton_method("order") { i }
end
end
self.const_set key, value
end
end
和
class TestEnum
include Enum
enum :TEST, value: 1
end
当我试图
时>> TestEnum::TEST.is_a? TestEnum
false <-
我有这个。为什么?我希望看到'真实'。 但是
>> TestEnum::TEST.ancestors
TestEnum::TEST.ancestors
[TestEnum::TEST, TestEnum, Enum, Object
我做错了什么?
答案 0 :(得分:2)
obj.is_a? C
是C
的类,或者obj
的类包含的模块,或{{1}类的超类之一,则 obj
为真{1}}。它用于实例,而不是子类。
obj
如果您想知道类是否是另一个给定类的子类,只需使用class A; end
class B < A; end
b = B.new
b.is_a? A # => true
。