gpt4 book ai didi

c - 如何使用 RubyInline 将 ruby​​ 数组转换为 C 数组?

转载 作者:数据小太阳 更新时间:2023-10-29 07:11:00 25 4
gpt4 key购买 nike

我有一个函数,可以逐个字符地比较 2 个字符串。我需要它比在 Ruby 中运行得更快,所以我使用 RubyInline 重写了 C 中的函数。它确实将速度提高了大约 100 倍。该函数如下所示:

  require 'inline'

inline do |builder|
builder.c "
static int distance(char *s, char *t){
...
}"
end

但是我需要比较 unicode 字符串。所以我决定改用 unpack("U*") 并比较整数数组。我无法从 RubyInline 的稀少文档中弄清楚如何将 ruby​​ 数组传递给函数以及如何将它们转换为 C 数组。感谢您的帮助!

最佳答案

这对如何从 C:http://rubycentral.com/pickaxe/ext_ruby.html 访问 Ruby 对象有一个很好的概述。

inline do |builder|
builder.c "
static VALUE some_method(VALUE s) {
int s_len = RARRAY(s)->len;
int result = 0;

VALUE *s_arr = RARRAY(s)->ptr;

for(i = 0; i < s_len; i++) {
result += NUM2INT(s_arr[i]); // example of reference
}

return INT2NUM(result); // convert C int back into ruby Numeric
}"
end

然后在 ruby​​ 中你可以像这样传递值给它:

object.some_method([1,2,3,4])

希望这对你有帮助。

关于c - 如何使用 RubyInline 将 ruby​​ 数组转换为 C 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1117180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com