2014-12-10 2 views
6

Я ищу функцию, которая может получить мне все ключи из хеша, или я могу пропустить хэш для получения одного ключа за раз.Как получить ключи от hash - ruby ​​c extension

В настоящее время я жестко прописывать ключ

VALUE option = rb_hash_aref(options, rb_str_new2("some_key")); 

ответ

1

Вы можете перебирать пар ключ/значение с функцией обратного вызова с использованием rb_hash_foreach (blog post w/an example):

void rb_hash_foreach(VALUE, int (*)(ANYARGS), VALUE); 

Существует rb_hash_keys in MRI, но это не так в любых файлах заголовков кажется, поэтому использование этого может быть рискованным.

+0

Йуп '' rb_hash_keys' сетует использование необъявленной идентификатора «rb_hash_keys'' – mandss

+0

У вас есть рабочий пример? Я получаю эту ошибку: функция-кандидат не жизнеспособна: неизвестное преобразование из «int (VALUE, VALUE, VALUE)» в «int (*) (...)» для второго аргумента void rb_hash_foreach (VALUE, int (*) (ANYARGS), VALUE); ' – mandss

+0

Источник MRI имеет пример в' rb_hash_keys': http://rxr.whitequark.org/mri/source/hash.c#1627 –

0

Вы всегда можете сделать вызов самого метода Ruby:

VALUE keys = rb_funcall(hash, rb_intern("keys"), 0)