[BUG] class variable

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

e$B0J2<$N5sF0$O%P%0$G$"$k$h$&$K;W$$$^$9!%e(B

$ ruby19 -v
ruby 1.9.0 (2008-06-16 revision 0) [i686-linux]
$ ruby19
class A
@@VAR = 1
end
class A
def self.hoge
p @@VAR
end
end
class << A
def fuga
p @@VAR
end
end
A.hoge
A.fuga
1
-:11: warning: class variable access from toplevel
-:11:in fuga': uninitialized class variable @@VAR in Object (NameError) from -:15:in

e$B!!$5$5$@$G$9!%e(B

e$B!!A4$/F1$8<ALd$re(B [ruby-dev:34527]
e$B$G$b$7$?$s$G$9$,!$H?1~$,$"$j$^$;e(B
e$B$s!%$I$&$7$?$b$s$G$7$g$&$+!%e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:35135] Re: [BUG] class variable”
on Tue, 17 Jun 2008 08:43:31 +0900, SASADA Koichi [email protected]
writes:

|e$B!!A4$/F1$8<ALd$re(B [ruby-dev:34527] e$B$G$b$7$?$s$G$9$,!$H?1~$,$"$j$^$;e(B
|e$B$s!%$I$&$7$?$b$s$G$7$g$&$+!%e(B

e$B$9$$$^$;$s!#e(B
e$B86B’O@$+$i$$$($Pe(B1.8e$B$N5sF0$K9g$o$;$k$Y$-$@$H;W$$$^$9!#e(B

e$B!!$5$5$@$G$9!%e(B

Yukihiro M. wrote:

e$B$9$$$^$;$s!#e(B
e$B86B’O@$+$i$$$($Pe(B1.8e$B$N5sF0$K9g$o$;$k$Y$-$@$H;W$$$^$9!#e(B

e$B!!<B$O!$%Q%C%A$b$"$k$N$GD>$=$&$H;W$($PD>$;$k$N$G$9$,!$$I$&$9$k$Y$-$Ge(B
e$B$7$g$&$+!%e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: SASADA Koichi [email protected]
Subject: [ruby-dev:35135] Re: [BUG] class variable
Date: Tue, 17 Jun 2008 08:43:31 +0900
Message-ID: [email protected]

e$B!!A4$/F1$8<ALd$re(B [ruby-dev:34527] e$B$G$b$7$?$s$G$9$,!$H?1~$,$"$j$^$;e(B
e$B$s!%$I$&$7$?$b$s$G$7$g$&$+!%e(B

e$B$9$_$^$;$s!%8+Mn$H$7$F$^$7$?!%e(B

e$BCzEY!$#1K|K\e(Bover/e$BH>F|$Ne(B SPAM bounce

e$BHo32$r<u$1$F$?;~$G!$e(B

e$BL$,8~$$$F$$$^$;$s$G$7$?!%e(B

e$BJQ99$K<j4V$,$+$+$C$Fe(B 1.9.0-2 e$B$^$G$K$OFq$7$$$h$&$G$"$l$P!$e(B
multi-tk.rb e$B$O1~5^=hCVE*$KBP1~$7$^$9$,!$$I$&$7$^$7$g$&!)e(B

e$B!!$5$5$@$G$9!%e(B

Yukihiro M. wrote:

e$B$5$5$@$5$s$,!V#1#6F|2a$.$F$$$k$N$G<u$1F~$l$i$l$J$$!W$H$$$&$Ne(B
e$B$G$J$1$l$PD>$7$F$$$?$@$-$?$$$G$9!#e(B

e$B!!5DO@$NM>CO$b$J$/!$e(B1.8
e$B$N;EMM$,@5$7$$!$$H$$$&$3$H$G$7$?$iF~$l$^$9!%e(B
e$B$^$@LB$C$F$k$1$Ie(B 1.8
e$B$N;EMM$K$7$F$*$3$&$+$J$!!$$H$$$&$3$H$G$7$?$i1de(B
e$B4|$7$^$9!%e(B

e$B:#$^$G$OC1$J$k%P%0$@$C$?!)e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:35145] Re: [BUG] class variable”
on Tue, 17 Jun 2008 23:11:27 +0900, SASADA Koichi [email protected]
writes:

|Yukihiro M. wrote:
|> e$B$5$5$@$5$s$,!V#1#6F|2a$.$F$$$k$N$G<u$1F~$l$i$l$J$$!W$H$$$&$Ne(B
|> e$B$G$J$1$l$PD>$7$F$$$?$@$-$?$$$G$9!#e(B
|
|e$B!!5DO@$NM>CO$b$J$/!$e(B1.8 e$B$N;EMM$,@5$7$$!$$H$$$&$3$H$G$7$?$iF~$l$^$9!%e(B
|e$B$^$@LB$C$F$k$1$Ie(B 1.8 e$B$N;EMM$K$7$F$*$3$&$+$J$!!$$H$$$&$3$H$G$7$?$i1de(B
|e$B4|$7$^$9!%e(B

e$B!V5DO@$NM>CO$,$J$$$H$O$$$($J$$$1$I!";d$Oe(B1.8e$B$N;EMM$,@5$7$$$H;W$Ce(B
e$B$F$k!W$G$9!#e(B

e$B!!$5$5$@$G$9!%e(B

Yukihiro M. wrote:

e$B!V5DO@$NM>CO$,$J$$$H$O$$$($J$$$1$I!";d$Oe(B1.8e$B$N;EMM$,@5$7$$$H;W$Ce(B
e$B$F$k!W$G$9!#e(B

e$B!!$9$$^$;$s$9$$^$;$s!%e(B[ruby-dev:34527]
e$B$OJL$NOC$G!$$7$+$b$9$G$Ke(B
e$B%Q%C%A$O$"$?$C$F$$$^$7$?e(B orz

e$B!!1J0f$5$s$N;XE&$O!$$^$?JL$N;XE&$G$7$g$&$+!%$D$^$j!$e(B1.8
e$B0JA0$b4V0c$Ce(B
e$B$F$$$k!$$H$$$&$3$H!)e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:35139] Re: [BUG] class variable”
on Tue, 17 Jun 2008 11:28:42 +0900, SASADA Koichi [email protected]
writes:

|Yukihiro M. wrote:
|> e$B$9$$$^$;$s!#e(B
|> e$B86B’O@$+$i$$$($Pe(B1.8e$B$N5sF0$K9g$o$;$k$Y$-$@$H;W$$$^$9!#e(B
|
|e$B!!<B$O!$%Q%C%A$b$"$k$N$GD>$=$&$H;W$($PD>$;$k$N$G$9$,!$$I$&$9$k$Y$-$Ge(B
|e$B$7$g$&$+!%e(B

e$B$5$5$@$5$s$,!V#1#6F|2a$.$F$$$k$N$G<u$1F~$l$i$l$J$$!W$H$$$&$Ne(B
e$B$G$J$1$l$PD>$7$F$$$?$@$-$?$$$G$9!#e(B

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: SASADA Koichi [email protected]
Subject: [ruby-dev:35147] Re: [BUG] class variable
Date: Tue, 17 Jun 2008 23:41:07 +0900
Message-ID: [email protected]

e$B!!$9$$^$;$s$9$$^$;$s!%e(B[ruby-dev:34527] e$B$OJL$NOC$G!$$7$+$b$9$G$Ke(B
e$B%Q%C%A$O$"$?$C$F$$$^$7$?e(B orz

e$B!!1J0f$5$s$N;XE&$O!$$^$?JL$N;XE&$G$7$g$&$+!%$D$^$j!$e(B1.8 e$B0JA0$b4V0c$Ce(B
e$B$F$$$k!$$H$$$&$3$H!)e(B

e$B$&$n!$$4$a$s$J$5$$!%e(B1.8
e$B0JA0$G$O$G$-$F$$$?$H4*0c$$$7$F$^$7$?!%e(B

e$B>!<j$K40c$$$7$F$$$?;d$,0-$$$@$1$+$b$7$l$^$;$s$,!$e(B
[ruby-dev:35133] e$B$G=R$Y$F$$$?$N$O!$%^%K%e%"%k$K=q$+$l$?e(B
e$B!Ve(BRuby
e$B$K$
$1$k%/%i%9%a%=%C%I$H$O%/%i%9$NFC0[%a%=%C%I$N$3$H$G$9!We(B
e$B$H$$$&Dj5A$+$i4|BT$5$l$k$b$N$H5sF0$,0c$&$H$$$&$3$H$G$9!%e(B

e$B$3$NDj5A$K4p$E$/$J$i!$e(B

class A
@iVAR=0
@@VAR = 1
def self.hoge; p @iVAR; p @@VAR; end
def A.fuga; p @iVAR; p @@VAR; end
end
class << A
def foo; p @iVAR; p @@VAR; end
end
def A.bar; p @iVAR; p @@VAR; end

e$B$Ne(B A.hoge, A.fuga, A.foo, A.bar
e$B$OF1Ey$N%/%i%9%a%=%C%I$G$"$k$3$H$re(B
e$B4|BT$7$F$7$^$$$^$9$,!$e(BA.hoge, A.fuga e$B$Oe(B 0, 1
e$B$rJV$9$b$N$N!$e(B
A.foo e$B$Oe(B

irb(main):013:0> A.foo
0
(irb):8: warning: class variable access from toplevel
NameError: uninitialized class variable @@VAR in Object
from (irb):8:in foo' from (irb):13 from /usr/local/bin/irb19:12:in

e$B$G$9$7!$e(BA.bar e$B$Oe(B

irb(main):014:0> A.bar
0
NameError: uninitialized class variable @@VAR in Object
from (irb):10:in bar' from (irb):14 from /usr/local/bin/irb19:12:in

e$B$H$J$j$^$9e(B
(e$B7Y9pI=<(J,!$HyL/$KF0:n$,0c$&$N$b5$$K$J$j$^$9e(B)e$B!%e(B

e$B$H$$$&$o$1$G!$%/%i%9$N%$%s%9%?%s%9JQ?t$X$N%“%/%;%9$OF1$8$G$9$,!$e(B
e$B%/%i%9JQ?t$X$N%”%/%;%9$O5sF0$,0[$J$k$H$$$&$3$H$K$J$j$^$9!%e(B

e$B$3$NE@!$%*%V%8%'%/%H$NFC0[%a%=%C%I$G$bF1$8$@$C$?$s$G$9$M!%e(B(^_^;

e$BFC0[%a%=%C%I$H$7$FDj5A$9$k$H%/%i%9JQ?t$X$N%"%/%;%9$O$G$-$J$$!%e(B

e$B%^%K%e%“%k$NDj5A$r2~$a$F!$e(B
e$B!VFC0[%/%i%9$,2p:_$7$?>l9g!$e(B
e$BFC0[%a%=%C%I$NDj5A$O$=$NFC0[%/%i%9$X$NDj5A$H$J$k$?$a!$e(B
e$BFC0[%a%=%C%I$rDj5A$7$h$&$H$7$F$$$k%/%i%9$N%/%i%9JQ?t$X$Oe(B
e$B%”%/%;%9$G$-$^$;$s!%e(B
e$B$=$N$?$a!$%/%i%9$NFC0[%a%=%C%I$H%/%i%9%a%=%C%I$H$Oe(B
e$B8+3]$1$OF1$8$K8+$($^$9$,5sF0$O0[$J$j$^$9!We(B
e$B$HDj5A$7$F!$%^%K%e%“%k$K$*$1$k%3!<%INc$G$b0c$$$rL@<($9$k$N$G$”$l$P!$e(B
e$B$=$l$O$=$l$G$$$$$N$+$b$7$l$^$;$s!%e(B

e$B$?$@$=$N>l9g$G$b!$e(BA.fuga e$B$He(B A.bar e$B$H$N0c$$$Oe(B

e$B$d$dJ,$+$j$E$i$$$h$&$K46$8$F!$$"$^$j$9$C$-$j$O$7$^$;$s$,!%!%!%e(B

e$BH/C<$O;d$N>!<j$J;W$$9~$_$G$9$N$G!$e(B
e$B!V;EMM$rJQ99$9$Y$-!W$J$I$H$O<gD%$7$^$;$s$,!$e(B
e$B;d$N$h$&$J4*0c$$$rKI$0$?$a$K$be(B
e$B%^%K%e%"%k$N5-=R$O=$@5$9$Y$-$+$H;W$$$^$9!%e(B

e$B$3$s$K$A$Oe(B sheepman e$B$G$9!#e(B

e$B$3$l$OFC0[%a%=%C%I$G$O$J$/$F!"%/%i%9JQ?t$N%9%3!<%W$NLdBj$@$H;W$$$^$9!#e(B

e$B8@8l;EMM$K$H$j$"$($:0J2<$N$h$&$K=q$-2C$($F$*$-$^$7$?!#e(B

http://doc.loveruby.net/refm/api/view/spec/variables#class_var_scope

e$BNc$($P!"0J2<$N$h$&$J%9%/%j%W%H$G$be(B 1
e$B$rI=<($7$^$9!#e(B1.8,1.9e$BN>J}$G!#e(B

class A
end

class B
@@v = 1
def A.hoge
@@v
end
end

p A.hoge #=> 1

On Wed, 18 Jun 2008 01:17:17 +0900

e$B1J0f!wCNG=!%6e9)Bg$G$9!%e(B

From: sheepman [email protected]
Subject: [ruby-dev:35190] Re: [BUG] class variable
Date: Sat, 21 Jun 2008 09:14:24 +0900
Message-ID: [email protected]

e$B$3$l$OFC0[%a%=%C%I$G$O$J$/$F!"%/%i%9JQ?t$N%9%3!<%W$NLdBj$@$H;W$$$^$9!#e(B

e$B$"$!!$$J$k$[$I!%$=$&$$$&$3$H$J$s$G$9$+!%e(B
e$B$G$b!$$=$l$C$F8@8l;EMM$H$7$F$I$&$J$s$G$7$g$&!)e(B
e$B0J2<$N$h$&$K$J$k$H$$$&$3$H$G$9$h$M!%e(B

class A
@ivar = :class_A
@@cvar = :class_A
def A.m_A_A
p(:@ivar=>@ivar, :@@cvar=>@@cvar)
end
def A.set_var_A
@ivar = :mod_A_A
@@cvar = :mod_A_A
end
end
class B
@ivar = :class_B
@@cvar = :class_B
def A.m_B_A
p(:@ivar=>@ivar, :@@cvar=>@@cvar)
end
def A.set_var_B
@ivar = :mod_B_A
@@cvar = :mod_B_A
end
def B.vars
p(:@ivar=>@ivar, :@@cvar=>@@cvar)
end
end

A.m_A_A #=> {:@ivar=>:class_A, :@@cvar=>:class_A}
A.m_B_A #=> {:@ivar=>:class_A, :@@cvar=>:class_B}
B.vars #=> {:@ivar=>:class_B, :@@cvar=>:class_B}

A.set_var_A
A.m_A_A #=> {:@ivar=>:mod_A_A, :@@cvar=>:mod_A_A}
A.m_B_A #=> {:@ivar=>:mod_A_A, :@@cvar=>:class_B}
B.vars #=> {:@ivar=>:class_B, :@@cvar=>:class_B}

A.set_var_B
A.m_A_A #=> {:@ivar=>:mod_B_A, :@@cvar=>:mod_A_A}
A.m_B_A #=> {:@ivar=>:mod_B_A, :@@cvar=>:mod_B_A}
B.vars #=> {:@ivar=>:class_B, :@@cvar=>:mod_B_A}

e$B%/%i%9$H$7$F$OD>@$K$O4X78$N$J$$e(B A e$B$He(B B e$B$H$N4V$Ge(B
e$B%/%i%9JQ?t$,6&M-$5$l$F$7$^$&$3$H$K$J$k$o$1$G$9$h$M!%e(B

A e$B$He(B B e$B$H$N4V$@$1$G$“$l$P!$%3!<%I>e$G4X78$,D>@\8+$($k$@$1e(B
e$B$^$@%^%7$J$N$G$9$,!$$5$i$Ke(B class C < A; end e$B$H$9$k$He(B
e$B%3!<%I>e$G$OHs>o$KJ,$+$j$K$/$$7A$Ge(B
B e$B$He(B C e$B$H$N4V$G%/%i%9JQ?t$,6&M-$5$l$F$7$^$&$3$H$K$J$j$^$9!%e(B
e$B%/%i%9e(B B e$B$+$i$G$Oe(B inherited e$B%a%=%C%I$J$I$Ge(B
hook e$B$7$FB*$($k$3$H$J$I$b$G$-$^$;$s$7!$e(B
e$B%/%i%9e(B C e$B$+$i$be(B B e$B$H$N4V$K0MB84X78$,$”$k$H$$$&$N$Oe(B
e$B%3!<%I$+$i$OD>@$K$O8+$($^$;$s!%e(B

e$B8=>u$O%P%0$N29>2$H$J$k;EMM$@$h$J$!$H;W$$$^$9!%e(B