$B?\F#$G$9!#(B
Class#inherited$B$,Dj5A$5$l$F$$$k$H7Q>5$7$?;~$K8F$S=P$5$l$^$9(B
$B$,!"(Bruby_1_8$B$G$O%V%m%C%/IU$-$GL5L>%/%i%9$rDj5A$7$?$H$-$N5sF0(B
$B$,$*$+$7$$5$$,$7$^$9!#(B
% ruby -e '
class A
def A.inherited(sub)
p :A
end
end
Class.new(A) do
p :anonymous
end
'
:anonymous
:A
trunk$B$G$O%V%m%C%/$,I>2A$5$l$kA0$K(Binherited$B$,8F$P$l$^$9!#(B
% ruby1.9 -e '
class A
def A.inherited(sub)
p :A
end
end
Class.new(A) do
p :anonymous
end
'
:A
:anonymous
$BDL>o$N%/%i%9Dj5A$G$O(Bclass ... end$BFb$,<B9T$5$l$kA0$K(Binherited
$B$,8F$P$l$k$3$H$r9M$($k$H!"(Btrunk$B$G$N5sF0$NJ}$,<+A3$J5$$,$7$^(B
$B$9!#(B
$B$A$J$_$K!"(Btrunk$B$G$3$N=$@5$,9T$o$l$?$N$O(B2005-03-04$B$N(Br8068$B$N$G(B
$B$+$$%3%_%C%H$NCf$G$9!#(B
Index: object.c
===================================================================
--- object.c (revision 16346)
+++ object.c (working copy)
@@ -1564,8 +1564,8 @@
}
RCLASS(klass)->super = super;
rb_make_metaclass(klass, RBASIC(super)->klass);
+ rb_class_inherited(super, klass);
rb_mod_initialize(klass);
- rb_class_inherited(super, klass);
return klass;
}
Index: test/ruby/test_class.rb
===================================================================
--- test/ruby/test_class.rb (revision 0)
+++ test/ruby/test_class.rb (revision 0)
@@ -0,0 +1,34 @@
+require 'test/unit'
+
+class TestClass < Test::Unit::TestCase
+ class InheritedDetector
+ @@sub_classes = []
+ class << self
+ def sub_classes
+ @@sub_classes
+ end
+
+ def inherited(sub)
+ @@sub_classes << sub
+ end
+ end
+ end
+
+ class InheritedClass < InheritedDetector
+ end
+
+ def test_s_inherited
+ assert_equal([InheritedClass], InheritedDetector.sub_classes)
+ inherited_class = Class.new(InheritedDetector)
+ assert_equal([InheritedClass, inherited_class],
+ InheritedDetector.sub_classes)
+ sub_classes_snapshot = nil
+ inherited_class_with_block = Class.new(InheritedDetector) do
+ sub_classes_snapshot = InheritedDetector.sub_classes.dup
+ end
+ assert_equal([InheritedClass, inherited_class,
inherited_class_with_block],
+ InheritedDetector.sub_classes)
+ assert_equal([InheritedClass, inherited_class,
inherited_class_with_block],
+ sub_classes_snapshot)
+ end
+end
on 10.05.2008 15:31
on 10.05.2008 19:02
$B$^$D$b$H(B $B$f$-$R$m$G$9(B
In message "Re: [ruby-dev:34636] [ruby_1_8]
Class#inherited$B$N8F$P$l$k%?%$%_%s%0(B"
on Sat, 10 May 2008 22:30:13 +0900, Kouhei Sutou <kou@cozmixng.org>
writes:
|Class#inherited$B$,Dj5A$5$l$F$$$k$H7Q>5$7$?;~$K8F$S=P$5$l$^$9(B
|$B$,!"(Bruby_1_8$B$G$O%V%m%C%/IU$-$GL5L>%/%i%9$rDj5A$7$?$H$-$N5sF0(B
|$B$,$*$+$7$$5$$,$7$^$9!#(B
|trunk$B$G$O%V%m%C%/$,I>2A$5$l$kA0$K(Binherited$B$,8F$P$l$^$9!#(B
|$BDL>o$N%/%i%9Dj5A$G$O(Bclass ... end$BFb$,<B9T$5$l$kA0$K(Binherited
|$B$,8F$P$l$k$3$H$r9M$($k$H!"(Btrunk$B$G$N5sF0$NJ}$,<+A3$J5$$,$7$^(B
|$B$9!#(B
trunk$B$NJ}$,!V$h$$5sF0!W$G$"$k$3$H$O3N$+$G$7$g$&$M(B($B$=$&;W$C$F(B
$BJQ$($?3P$($,$"$k(B)$B!#(B1.8$B$bB7$($?$$$N$O$d$^$d$^$G$9$,!"8_49@-$N(B
$BLdBj$b$"$k$N$GE,MQ$9$k$+$I$&$+$O(Bknu$B$5$s$K$*G$$;$7$^$9!#(B
$B$G$b!"J|CV$;$6$k$r$($J$$$+$J!#(B