Bug #4971

Module#class_variables

Added by Shugo Maeda about 4 years ago. Updated almost 3 years ago.

[ruby-dev:44034]
Status:Closed
Priority:Normal
Assignee:Nobuyoshi Nakada
ruby -v:- Backport:

Description

Ruby 1.9だとModule#class_variablesはスーパークラスのクラス変数を返しませんが、仕様でしょうか?

class Foo
@@foo = 123
end

class Bar < Foo
@@bar = 456
end

p Bar.class_variables #=> 1.8では["@@bar", "@@foo"], 1.9では[:@@bar]

commit logには

* variable.c (rb_mod_class_variables): class variables are no longer
  inherited.  

と書いてあるのですが、当時のクラス変数の仕様って今の1.8とも1.9とも違う
仕様だったりするでしょうか。
Bar.class_variable_get(:@@foo)で値は取れるので、class_variablesで:@@fooを
返してもよい気がするのですが。

class_variables.diff Magnifier (4.06 KB) Shugo Maeda, 07/16/2011 08:50 PM

Associated revisions

Revision 36466
Added by Shugo Maeda about 3 years ago

  • variable.c (rb_mod_class_variables): return inherited variables
    except when the optional argument is set to false.
    [Bug #4971]

  • variable.c (rb_mod_constants): fix typo in documentation.

Revision 36466
Added by Shugo Maeda about 3 years ago

  • variable.c (rb_mod_class_variables): return inherited variables
    except when the optional argument is set to false.
    [Bug #4971]

  • variable.c (rb_mod_constants): fix typo in documentation.

History

#1 Updated by Motohiro KOSAKI about 4 years ago

うーん、議論が止まっているように見えて遺憾であります。前田さん、これって治らないとどのぐらい致命的でしょうか。

#2 Updated by Shugo Maeda about 4 years ago

  • Target version changed from 1.9.3 to 2.0.0

Motohiro KOSAKI wrote:

うーん、議論が止まっているように見えて遺憾であります。前田さん、これって治らないとどのぐらい致命的でしょうか。

今まで文句が出なかったということはたぶんあまり使われていないと思うので、targetを1.9.xに
しましょうか。

個人的には、Module#class_variablesもModule#constantsのように引数でコントロールできる
ようにする(デフォルトではスーパークラスも探索する)のがよいと思います。

#3 Updated by Shugo Maeda about 4 years ago

  • ruby -v changed from ruby 1.9.3dev (2011-06-16 trunk 32113) [i686-linux] to -

前田です。

2011年7月8日22:11 KOSAKI Motohiro kosaki.motohiro@gmail.com:

今まで文句が出なかったということはたぶんあまり使われていないと思うので、targetを1.9.xに
しましょうか。

個人的には、Module#class_variablesもModule#constantsのように引数でコントロールできる
ようにする(デフォルトではスーパークラスも探索する)のがよいと思います。

ええと僕の個人的な意見だと

・今回提示された新仕様を議論するなら1.9.4 いき
・1.8と同じ仕様にしろと主張し、かつmatzが受け入れて、かつ、実装が preview1
(7/17あたり)ぐらいまでに出てくるなら、1.9.3 アリ

ぐらいのスケジュール感覚でした。
どちらにしろまつもとさんが無反応のままだと申し訳ありませんが自動的に1.9.4にスリップということになります。や、前田さんが強権発動するなら従いますが。

いや、そんな権限ないです…。

いったん1.8に戻すというのも考えましたが、それだとそのクラスに定義された
クラス変数だけの一覧を取る手段がなくなるので、1.9.4に先送りした方がいい
気がします。

--
Shugo Maeda

#4 Updated by Shugo Maeda about 4 years ago

前田です。

2011年7月8日22:11 KOSAKI Motohiro kosaki.motohiro@gmail.com:

今まで文句が出なかったということはたぶんあまり使われていないと思うので、targetを1.9.xに
しましょうか。

個人的には、Module#class_variablesもModule#constantsのように引数でコントロールできる
ようにする(デフォルトではスーパークラスも探索する)のがよいと思います。

ええと僕の個人的な意見だと

・今回提示された新仕様を議論するなら1.9.4 いき
・1.8と同じ仕様にしろと主張し、かつmatzが受け入れて、かつ、実装が preview1
(7/17あたり)ぐらいまでに出てくるなら、1.9.3 アリ

ぐらいのスケジュール感覚でした。
どちらにしろまつもとさんが無反応のままだと申し訳ありませんが自動的に1.9.4にスリップということになります。や、前田さんが強権発動するなら従いますが。

いや、そんな権限ないです…。

いったん1.8に戻すというのも考えましたが、それだとそのクラスに定義された
クラス変数だけの一覧を取る手段がなくなるので、1.9.4に先送りした方がいい
気がします。

--
Shugo Maeda

#5 Updated by Shugo Maeda about 4 years ago

前田です。

Shugo Maeda wrote:

個人的には、Module#class_variablesもModule#constantsのように引数でコントロールできる
ようにする(デフォルトではスーパークラスも探索する)のがよいと思います。

この方針で作ったパッチを添付しておきます。

trunkならRails風に勝手にcommitしてもいいんですかね。

#6 Updated by Shugo Maeda about 4 years ago

まつもとさん

前田です。

Shugo Maeda wrote:

個人的には、Module#class_variablesもModule#constantsのように引数でコントロールできる
ようにする(デフォルトではスーパークラスも探索する)のがよいと思います。

この方針で作ったパッチを添付しておきます。

trunkならRails風に勝手にcommitしてもいいんですかね。

こさきさんに「Matzがackしねーからreject、それが慣行だ」と言われてしまったので、
上記のような修正でよいかどうか確認をお願いします。

#7 Updated by Motohiro KOSAKI about 4 years ago

まつもとさん
前田です。

この方針で作ったパッチを添付しておきます。

trunkならRails風に勝手にcommitしてもいいんですかね。

こさきさんに「Matzがackしねーからreject、それが慣行だ」と言われてしまったので、
上記のような修正でよいかどうか確認をお願いします。

えええええええ。なにこの意図的な曲解(><;;

#8 Updated by Motohiro KOSAKI about 4 years ago

まつもとさん
前田です。

この方針で作ったパッチを添付しておきます。

trunkならRails風に勝手にcommitしてもいいんですかね。

こさきさんに「Matzがackしねーからreject、それが慣行だ」と言われてしまったので、
上記のような修正でよいかどうか確認をお願いします。

えええええええ。なにこの意図的な曲解(><;;

#9 Updated by Shyouhei Urabe over 3 years ago

  • Status changed from Open to Assigned

#10 Updated by Shugo Maeda over 3 years ago

まつもとさん、この件ですがどうでしょうか?

shugo (Shugo Maeda) wrote:

前田です。

Shugo Maeda wrote:

個人的には、Module#class_variablesもModule#constantsのように引数でコントロールできる
ようにする(デフォルトではスーパークラスも探索する)のがよいと思います。

この方針で作ったパッチを添付しておきます。

trunkならRails風に勝手にcommitしてもいいんですかね。

#11 Updated by Yukihiro Matsumoto about 3 years ago

  • Assignee changed from Yukihiro Matsumoto to Nobuyoshi Nakada

あ、気がついてなかった。constantsと同じような挙動を希望します。
って言ったら中田さんがやってくれるかな。

#12 Updated by Shugo Maeda about 3 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

This issue was solved with changeset r36466.
Shugo, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.


  • variable.c (rb_mod_class_variables): return inherited variables
    except when the optional argument is set to false.
    [Bug #4971]

  • variable.c (rb_mod_constants): fix typo in documentation.

Also available in: Atom PDF