У меня есть класс.Давайте назовем это SomeClass:
class SomeClass
end
Вместо определения экземпляров этого класса обычным способом, я хотел бы определить их все, используя константу:
MyConstant = SomeClass.new
Я хочу иметь возможностьчтобы захватить имя константы, которая была задана для некоторого класса, во многом так же, как это делают стандартные классы ruby с методом .class.
MyConstant.name #-> "MyConstant"
Я хочу сделать это, чтобы лучше отображатьсообщения об ошибках от всех экземпляров некоторого класса, например так:
class SomeClass
def display_error_message
"Error, some class #{self.name} has a problem"
end
end
MyConstant.display_error_message
#-> "Error, some class MyConstant has a problem"
Есть ли способ сделать это?
РЕДАКТИРОВАТЬ
Вот пример, чтобы уточнить, для чего я снимаю.
(Enum - это имя создаваемого мною класса, который должен действовать аналогично типу Swift 'Enum'. По сути, он задает предварительно определенный список параметров (: pepperoni,: sausage,: mushroom)с raw_value ("Pepperoni", "Sausage", "Mushroom".) Очевидно, что в этом примере может работать хеш или простой алгоритм преобразования символа в строку случая UpperCamel, но в действительности класс enum будет выполнять намного больше, но этот пример показывает суть этого.
class Pizza
attr_reader :topping
Toppings = Enum.new do
option(:pepperoni).set("Pepperoni")
option(:sausage).set("Sausage")
option(:mushrooms).set("Mushrooms")
end
def set_topping(symbol)
@topping = Toppings[symbol]
end
end
pizza = Pizza.new
### Happy Case
pizza.set_topping(:pepperoni)
### Sad Case (Error message shown below is what I'm trying to figure out)
pizza.set_topping(:spinach)
#-> Error. enum Toppings has no option spinach