Как вызвать внутренние методы C Ruby в Ruby? - PullRequest
3 голосов
/ 22 декабря 2010

Я пытаюсь создать хеш из массива, а документация для http://ruby -doc.org / ruby-1.9 / classes / Array.src / M000744.html показывает внутренний метод rubyназывается ary_make_hash.Источник использует это для сравнения массивов.Соответствующая строка в источнике: ary_make_hash (to_ary (ary2), 0);

Есть ли способ получить доступ к функции ary_make_hash и другим внутренним функциям Ruby изнутри Ruby?Я спрашиваю, поскольку я пытаюсь преобразовать огромный массив в хеш, и я бы хотел использовать встроенные методы Си, поскольку они намного быстрее.(К вашему сведению, я вижу разницу в скорости, вычитая два массива, что внутренне вызывает метод преобразователя).Спасибо за любые мысли.

Роберт

Ответы [ 3 ]

1 голос
/ 23 декабря 2010

Ни один из этих вариантов не достаточно быстр?Вы совсем не много делаете в Ruby, но полагаетесь на встроенное преобразование массива в хеш.

a1 = [[:a,1],[:b,2],[:c,3]]
h1 = Hash[a2]
#=> {:a=>1, :b=>2, :c=>3} 

a2 = a1.flatten
h2 = Hash[*a2]
#=> {:a=>1, :b=>2, :c=>3}     
1 голос
/ 23 декабря 2010

в общем, если он не в ruby.h, то это не "публичный" API, который может помочь в поиске метода с именем rb_xxx.GL.

0 голосов
/ 23 декабря 2010

Эта функция является статической, что, в соответствии с этим: http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/SYNTAX/static.htm

означает, что на нее нельзя ссылаться извне файла array.c.

Так что для использованияэто, вы бы на самом деле взломать источник.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...