为Ruby gem编写C扩展名时,我需要测试参数值是否与已知的符号和字符串相等。
我知道你可以用
char *foo = "foo";
VALUE foo_string_value = rb_intern(foo);
然后将其转换为符号:
VALUE foo_sym_value = ID2SYM(foo_string_value);
我的问题是,是否我现在可以可靠地测试参数,其可以是符号或字符串,:foo
或者'foo'
,与这些用C指针相等:
if (param == foo_string_value || param == foo_sym_value) {
...
}
换句话说,实习生是否保证指针相等也是符号和字符串的值相等?
如果这是错误的方法,那么进行此比较的正确方法是什么?
我想通了。做我想要的事情的合理方法似乎是
VALUE square_sym = ID2SYM(rb_intern("square"));
VALUE kind_as_sym = rb_funcall(kind_value, rb_intern("to_sym"), 0);
if (square_sym == kind_as_sym) {
...
}
符号总是被嵌入并且具有唯一的值。字符串不是,不是。可以对它们进行内插以获得ID
每个字符串唯一的s,但这在这种情况下无济于事。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句