c extension: symbols

  • Thread starter Patrick Gundlach
  • Start date
P

Patrick Gundlach

Hi,

in pure ruby, I sometimes access hashes with symbols as keys:

{ :foo => "this", :bar => "other" }


Q: How would I create this kind of hash on the c part?

OK, the hash is easy (rb_hash_new()). But how do I specify the key?
When I use rb_intern("foo"), I get a hash like:

{ 1234 => "this", 2345 => "other" }


Patrick
 
C

Charles Mills

Patrick said:
Hi,

in pure ruby, I sometimes access hashes with symbols as keys:

{ :foo => "this", :bar => "other" }


Q: How would I create this kind of hash on the c part?

OK, the hash is easy (rb_hash_new()). But how do I specify the key?
When I use rb_intern("foo"), I get a hash like:

{ 1234 => "this", 2345 => "other" }


Patrick

rb_intern() returns an ID (ID type is defined in ruby.h). To convert
it to a symbol use the ID2SYM() macro function. For example (untested
code):
VALUE h = rb_hash_new(), v = ID2SYM(rb_intern("foo"));
rb_hash_aset(h, v, rb_str_new2("bar"));
rb_p(h);

-Charlie
 
P

Patrick Gundlach

Hello Charlie,
VALUE h = rb_hash_new(), v = ID2SYM(rb_intern("foo"));
rb_hash_aset(h, v, rb_str_new2("bar"));
rb_p(h);


thanks for ID2SYM, works like a charm. Is that documented somewhere?

Patrick
 
R

rmagick

A lot of the C extension API is undocumented. If you're going to be
creating extensions you'll probably find it's worth your time to look
at the external declarations and macros in ruby.h and intern.h, and
then looking at the code in the Ruby iterpreter itself. I've found that
the best way to find out how to use the API is to look at the code for
the builtin classes like Array and String.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,794
Messages
2,569,641
Members
45,354
Latest member
OrenKrause

Latest Threads

Top