class DynamicClass
def initialize(class_name)
@class_name = class_name
Object.const_set class_name, Class.new
end
def def_method(method_name,method_body)
Object.const_get(@class_name).send(:define_method, method_name, Proc.new{method_body} )
end
def call(method_name)
puts "Hello, Your class #{@class_name} with method #{method_name} is ready. Calling: #{@class_name}.new.#{method_name}:"
Object.const_get(@class_name).new.send(method_name)
end
end
p 'Please enter the class name: '
class_name = gets.chomp
p 'Please enter the method name you wish to define: '
method_name = gets.chomp
p "Please enter the method's code: "
method_body = gets
n =DynamicClass.new(class_name)
n.def_method(method_name,method_body)
puts n.call(method_name)
Ожидаемый вывод:
Please enter the class name: User
Please enter the method name you wish to define: greet
Please enter the method's code: "Welcome from #{self.class} class. I am #{self}"
Hello, Your class User with method greet is ready. Calling: User.new.greet:
"Welcome from User class. I am <User#123456>"
Фактический вывод
"Пожалуйста, введите имя класса:" Пользователь
"Пожалуйста, введите название метода, который вы будете sh для определения: "greet
" Пожалуйста, введите код метода: "Welcome from # {self.class} class. Я # {self}
Здравствуйте, Ваш класс Пользователь с методом greet готов. Вызов: User.new.greet:
Добро пожаловать из класса # {self.class}. Я # {self}
method_body не выполняет интерполяцию строк .., я думаю, что ошибка использует метод get, есть идеи? ..