なんでClass#superclass
1 class Class 2 def subclasses3 ret = [] 4 ObjectSpac e.each_objec t(Class) do |cls| 5 ret << cls if cls.superclass == self 6 end 7 ret 8 end 9 end
posted by
technohippy
on Mon 4 Aug 2008
at 01:42
with
5 comments
superclassはloadされてることが保障されてるけど、subclassesはloadされてない可能性があるので、ちゃんと機能させようとしたら
みたいな事をする必要があるからじゃないですかね。
あれ? 今某プロフィールサービスではsubclasses使えてるけど、あれはRailsだから?? まぁもちろんすべてのsubclassをloadしてからしかちゃんと動作しないですけど。
なるほど、loadしてないと見えないからか。 いわれて見ればそのとおりですね。
あと、いまscript/consoleでみたらたしかにRailsにはありますね。 ActiveSupportはいろいろやりすぎてて全然把握できない・・・。
load されてないのは今は存在しない(必要とされてない)クラスだから無視されて然るべき、だよ派。どちらにしても、後からサブクラスを動的に追加されうる以上、どうやっても完全性は満たせないし。
という観点から行くと、現時点で利用可能なサブクラスの一覧、という機能としての subclasses はあっていいと思う。てか、入れれ>AS
ancestors
への対象性からdescendants
も欲しくなりますね。これはASにも入ってないみたいだ。