下面的eval语句是否可以被摆脱?下面的代码会过滤所有派生自BaseClass类型的类。然后这些类会被实例化,并调用方法hello。
module MySpace
class BaseClass
def hello; print "
hello world"; end
end
class A<BaseClass
def hello; super; print ", class A was here"; end
end
class B<BaseClass
def hello; super; print ", I m just a noisy class"; end
end
MySpace.constants.each do | e |
c=eval(e)
if c < BaseClass
c.new.hello
end
end
end
所以执行后的输出是:
hello world, I m just a noisy class
hello world, class A was here
我认为不必要地使用eval是恶劣的。我不确定在这里使用eval是否是必需的。是否有一种更智能的方法动态调用所有类型为“BaseClass”的类?