I’m just getting starting with ruby C extensions, and I’m having a
problem accessing hash values corresponding to keys which are symbols.
String keys work fine:
/* In ruby: myhash = { ‘foo’ => ‘blah’ } /
foo = rb_hash_aref(myhash, rb_str_new2(“foo”)); / works */
What is the proper way to do that? I found someone with the same problem
in the archives, but I’m afraid I didn’t understand Nobu’s answer in
ruby-talk:86571 :\
In message “Re: rb_hash_aref and symbol keys”
on Sat, 8 Apr 2006 01:16:48 +0900, Andre N. [email protected] writes:
|
|On Sat, 2006-04-08 at 00:02 +0900, Yukihiro M. wrote:
|> rb_intern() gives you ID, which is a mere C number. You have to
|> convert it into a Ruby Symbol Object by using ID2SYM() macro.
|
|Thank you Matz. Is this documented anywhere? It’s not mentioned in
|README.EXT.
I will update the following section in README.EXT:
2.2.2 ID or Symbol
You can invoke methods directly, without parsing the string. First I
need
to explain about ID. ID is the integer number to represent Ruby’s
identifiers such as variable names. The Ruby data type corresponding to
ID
is Symbol. It can be accessed from Ruby in the form:
:Identifier
You can get the ID value from a string within C code by using