Project

General

Profile

Actions

Bug #4971

closed

Module#class_variables

Added by shugo (Shugo Maeda) over 13 years ago. Updated about 12 years ago.

Status:
Closed
Target version:
ruby -v:
-
Backport:
[ruby-dev:44034]

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.  [ruby-dev:23808]

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


Files

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

Updated by kosaki (Motohiro KOSAKI) over 13 years ago

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

Updated by shugo (Shugo Maeda) over 13 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のように引数でコントロールできる
ようにする(デフォルトではスーパークラスも探索する)のがよいと思います。

Updated by shugo (Shugo Maeda) over 13 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 :

今まで文句が出なかったということはたぶんあまり使われていないと思うので、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

Updated by shugo (Shugo Maeda) over 13 years ago

前田です。

2011年7月8日22:11 KOSAKI Motohiro :

今まで文句が出なかったということはたぶんあまり使われていないと思うので、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

Updated by shugo (Shugo Maeda) over 13 years ago

前田です。

Shugo Maeda wrote:

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

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

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

Updated by shugo (Shugo Maeda) over 13 years ago

まつもとさん

前田です。

Shugo Maeda wrote:

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

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

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

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

Updated by kosaki (Motohiro KOSAKI) over 13 years ago

まつもとさん
前田です。

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

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

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

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

Updated by kosaki (Motohiro KOSAKI) over 13 years ago

まつもとさん
前田です。

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

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

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

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

Actions #9

Updated by shyouhei (Shyouhei Urabe) over 12 years ago

  • Status changed from Open to Assigned

Updated by shugo (Shugo Maeda) over 12 years ago

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

shugo (Shugo Maeda) wrote:

前田です。

Shugo Maeda wrote:

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

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

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

Updated by matz (Yukihiro Matsumoto) over 12 years ago

  • Assignee changed from matz (Yukihiro Matsumoto) to nobu (Nobuyoshi Nakada)

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

Actions #12

Updated by shugo (Shugo Maeda) over 12 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.
    [ruby-dev:44034] [Bug #4971]

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0