From: Macoto Kawaguchi Date: 2005-03-23T17:53:30+09:00 Subject: [ruby-list:40703] 拡張ライブラリでのクラス変数の参照について はじめまして。川口と申します。 Ruby の C の拡張ライブラリからクラス変数を参照したいのですが、 rb_iv_get() を使うと nil を返してきます。 クラス変数を参照するにはほかの関数があるのでしょうか? 宜しくお願いします。 以下、作ったソースと実行結果です。 FreeBSD 4.9 + ruby 1.8.1 (2003-12-25) [i386-freebsd4] FedoraCore3 + ruby 1.8.2 (2004-12-25) [i386-linux] で試しましたが同じ結果でした。 -- Moge.c #include "ruby.h" VALUE moge_func(VALUE self); void Init_Moge(void) { VALUE moge = rb_define_class("Moge", rb_cObject); rb_define_method(moge, "func", moge_func, 0); } VALUE moge_func(VALUE self) { VALUE val = rb_iv_get(self, "@@val"); if (val == Qnil) { printf("@@val : nil\n"); } else { printf("@@val : %d\n", NUM2INT(val)); } return Qnil; } -- moge.rb require 'Moge.so' class Moge @@val = 100 def func2 print "@@val : #{@@val}\n" end end if __FILE__ == $0 m = Moge.new m.func m.func2 end -- 実行結果 % ruby moge.rb @@val : nil @@val = 100 %