Я не уверен, что вы пытаетесь достичь с помощью этого устройства, но после некоторых изменений оно работает (ну, в зависимости от вашего определения «работать»):
class MyParentClass
def do_something_with(*args)
puts "something #{args.inspect}"
end
def do_something_else_with(*vars)
puts "else #{vars.inspect}"
end
end
def create_class(class_name,*vars)
new_class = Class::new(MyParentClass) do
define_method :initialize do |*args|
super()
do_something_with(*args)
do_something_else_with(*vars)
end
end
Object::const_set(class_name.intern,new_class)
end
create_class :MyClass, 1, :foo, :bar
MyClass.new(2, :baz)
Уловка, чтобы сделать vars
видимым, состоит в том, чтобы определить конструктор, используя замыкание.