[#40647] RAA dead link check — "NAKAMURA, Hiroshi" <nakahiro@...>

なひです。

19 messages 2005/03/04
[#40685] Re: RAA dead link check — "NAKAMURA, Hiroshi" <nakahiro@...> 2005/03/20

-----BEGIN PGP SIGNED MESSAGE-----

[ruby-list:40703] 拡張ライブラリでのクラス変数の参照について

From: Macoto Kawaguchi <macoto@...>
Date: 2005-03-23 08:53:30 UTC
List: 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
%

In This Thread

Prev Next