[#10793] 今度こそ (patch of the ruby-1.4.6 for NT4.0&VC4.0 on DEC Alpha.) — kou@...1609.sip.eee.yamaguchi-u.ac.jp (Koichi Okada)

岡田です。

10 messages 2000/09/01

[#10920] SIGINT on windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

17 messages 2000/09/14
[#11077] Re: SIGINT on windows — matz@... (Yukihiro Matsumoto) 2000/09/27

まつもと ゆきひろです

[#10944] dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

19 messages 2000/09/18
[#10955] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10963] Re: dummy DLL on Windows — "Nobuyoshi.Nakada" <nobu.nakada@...> 2000/09/19

なかだです。

[#10964] Re: dummy DLL on Windows — WATANABE Hirofumi <eban@...> 2000/09/19

わたなべです.

[#10978] [PATCH] require in require — "Nobuyoshi.Nakada" <nobu.nakada@...>

なかだです。

15 messages 2000/09/20

[#10985] httphead.rb proxy version problem — Katsuyuki Komatsu <komatsu@...>

小松です.

16 messages 2000/09/20
[#10989] Re: httphead.rb proxy version problem — Minero Aoki <aamine@...> 2000/09/20

あおきです。

[ruby-dev:10870] Re: Class Variable (sono 2)

From: matz@... (Yukihiro Matsumoto)
Date: 2000-09-08 02:16:26 UTC
List: ruby-dev #10870
まつもと ゆきひろです

In message "[ruby-dev:10866] Class Variable (sono 2)"
    on 00/09/08, Shin-ichiro HARA <sinara@blade.nagaokaut.ac.jp> writes:

|クラス変数へのメソッドによるアクセスなんですが、
|どうあるべきでしょうか?

現状のようであるべきだと思います(私は)。

ルールは

  特異メソッドでは
    レシーバがクラス/モジュールのとき、自分のクラス変数
    そうでないとき、自分のクラスのクラス変数

  それ以外
    もっとも内側で定義中のクラス/モジュールのクラス変数
    トップレベルではObjectのクラス変数

です。

で、原さんの例で食い違うものは

|class Foo
|   @@cvar = "Foo"
|   def cvar; @@cvar; end
|end
|$foo = Foo.new
|def $foo.cvar3; @@cvar; end
|def Foo.cvar4; @@cvar; end
|
|p $foo.cvar3 #=> Error(undefined)

cvar3はオブジェクトの特異メソッドですから、Fooのクラス変数を
検索します。よって "Foo"。

|class Bar
|   @@cvar = "Bar"
|   def $foo.cvar0; @@cvar; end
|   def Foo.cvar1; @@cvar; end
|end
|
|p $foo.cvar0 #=> "Bar"

BarとFooは関係がありませんから、Bar中で同名のクラス変数に代
入してもFooのクラス変数には影響はありません。特異メソッド中
のクラス変数はレシーバのクラスを検索しますから、Fooの@@cvar
を見ます。よって"Foo"。

|class Baz < Foo
|end
|baz = Baz.new
|p baz.cvar #=> "Foo"
|p Baz.cvar #=> "Foo"

Bazはクラスですが、クラスにはcvarメソッドが定義されていませ
ん。ここをcvar4に変更すると"Foo"。

|#=> の右が私の予想ですが、正しいでしょうか?

というわけで、2箇所ほど正しくなかったと思います。そしてそこ
が1.6.0と違う部分でしょう? あれ、preview3からまだ変更してた
かな?
                                まつもと ゆきひろ /:|)

In This Thread