c - Ruby C API 字符串和符号是否相等?

标签 c ruby ruby-c-extension

为 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,它们是每个字符串唯一的整数,但这在这种情况下没有帮助。

关于c - Ruby C API 字符串和符号是否相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22739420/

相关文章:

c++ - 调试 C++ 与调试 C 相比

android - 为什么填充这个数组会出现段错误?

C - 访问二维数组槽函数不起作用,崩溃

ruby - Watir,通过自定义属性定位元素

javascript - 将对象数组从 js 传递到 rails

ruby-on-rails - Resque清除失败的作业成功重试

ruby C 扩展 : Is there a way to finalize?

c - 分配给变量时指针的地址发生变化

c - 如何使用 c 扩展扩展我的 ruby​​ 类?

c++ - 无法完成 Rice (Ruby) 的简单示例。我错过了什么?