Я пытаюсь создать enum-подобный аналог 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
Что я делаю не так?