[ruby-list:50189] Re: クラス変数の定義について
From:
YOKOYAMA Takehiro <tac@...>
Date:
2015-07-01 09:33:00 UTC
List:
ruby-list #50189
>それは定義済みかどうかではなく、「"@@"で始まっていないのでクラス変数と
>して正しい名前ではない」というエラーです。
なるほど、諒解しました。
どうして錯覚してしまったのか振り返ってみると、rb_cvar_set() を
使うならば「@@」なしの変数も定義でき、Cで実装したメソッド内では
参照も可能なので、そういうものと思い込んでしまったようです。
さらに、リファレンス・マニュアルの「C API」に「変数がまだ定義されていない
場合は NameError を発生します」と書いてある (実際には発生しない) のも
誤解のもとでした。
rb_cvar_set(klass, rb_intern("@@tt_cvar"), INT2NUM(28));
rb_cvar_set(klass, rb_intern("tt_cvar"), INT2NUM(14));
val = rb_cvar_get(klass, rb_intern("tt_cvar"));
printf("val = %d\n", NUM2INT(val)); /* ==> val = 14 */
val = rb_cvar_get(klass, rb_intern("@@tt_cvar"));
printf("val = %d\n", NUM2INT(val)); /* ==> val = 28 */
val = rb_cv_get(klass, "@@tt_cvar");
printf("val = %d\n", NUM2INT(val)); /* ==> val = 28 */
--
tac@amris.co.jp
横山岳浩