以下の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
したがって、実行後の出力は次のようになります。
hello world、私はただ騒々しいクラスです
hello world、クラスAはここにいました
evalの不必要な使用は悪だと思います。そして、ここでevalの使用が必須かどうかはわかりません。タイプ「BaseClass」からすべてのクラスを動的に呼び出すためのよりスマートな方法はありますか?