是否可以摆脱下面的eval语句?下面的代码过滤掉所有从 BaseClass 类型派生的类。然后实例化这些类并调用方法“hello”。
module MySpace
class BaseClass
def hello; print "\nhello 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
所以执行后的输出是:
你好世界,我只是一个吵闹的班级
你好世界,A班来了
我认为不必要地使用eval是邪恶的。而且我不确定这里是否强制使用eval 。动态调用“BaseClass”类型的所有类是否有更智能的方法?