編集:以前は非常に具体的ではなかったため、これは質問の書き直しです。
そのため、C 拡張機能のインスタンス間で共有される変数の問題を解決するのに問題があります。これが私が遭遇しているものの例です。
>> t = SCOPE::TestClass.new #=> #<SCOPE::TestClass:0x000001011e86e0>
>> t.set = 4 #=> 4
>> t.get #=> 4
>> v = SCOPE::TestClass.new #=> #<SCOPE::TestClass:0x00000101412bf0>
>> v.set = 5 #=> 5
>> v.get #=> 5
>> t.get #=> 5
以下のコードでの最善の解決策は、次のように設定できる ruby 変数を単純に使用することでしょうか。
void rb_define_variable(const char *name, VALUE *var)
それとも、私が見ていない、または理解していない C の解決策はありますか?
コード:
#include <stdlib.h>
#include <ruby.h>
VALUE TestClass;
VALUE SCOPE;
VALUE test_var;
VALUE set(self, val);
VALUE get();
VALUE set(VALUE self, VALUE val) {
test_var = NUM2INT(val);
return Qnil;
}
VALUE get() {
return INT2NUM(test_var);
}
void Init_scope()
{
SCOPE = rb_define_module("SCOPE");
TestClass = rb_define_class_under(SCOPE, "TestClass", rb_cObject);
rb_define_method(TestClass, "set=", set, 1);
rb_define_method(TestClass, "get", get, 0);
}