編集:以前はあまり特定されていなかったので、これは質問の書き換えです。インスタンス間で外部変数を共有しない方法はありますか?
私は変数が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
次のコードでの最善の解決策は、単にあなたが
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);
}
インスタンスは何ですか? –
申し訳ありませんが、C拡張の複数のインスタンスを作成すると、外部変数の値を共有している状況が発生しています。 – doubleconfess