Accessing a hash value by string or symbol in C

I think the issue of string vs symbol hash access came up recently.
Here’s a function I use I thought I’d share for C extension writers:

/* Example:

  • Equivalent to hash[‘alpha’] || hash[:alpha]

  • rb_hash_aref2(v_hash, “alpha”)
  • Returns nil if neither is found.
    static VALUE rb_hash_aref2(VALUE v_hash, char
    VALUE v_key, v_val;

v_key = rb_str_new2(key);
v_val = rb_hash_aref(v_hash, v_key);

v_val = rb_hash_aref(v_hash, ID2SYM(rb_intern(key)));

return v_val;



This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs