Вы можете использовать что-то вроде этого:
def make_class(s_value, method_name, &method_body)
Class.new do
define_method method_name, method_body
define_method :to_s do
s_value
end
end
end
klass = make_class 'foo instance', :foo do |*args|
"called foo with #{args.inspect}"
end
k = klass.new
puts k.to_s # => foo instance
puts k.foo [1, 2], 'hello' # => called foo with [[1, 2], "hello"]
В этом случае вы должны передать тело вашего метода как блок (вы можете заменить |*args|
любым списком аргументов, который вы хотите иметь какпараметры для вас метод).Если вы хотите передать method_body
не как блок, а как строку, тогда eval
ваш друг.