This post originated from an RSS feed registered with Ruby Buzz
by Daniel Berger.
Original Post: Indifferent hash access for C extensions in Ruby
Feed Title: Testing 1,2,3...
Feed URL: http://djberg96.livejournal.com/data/rss
Feed Description: A blog on Ruby and other stuff.
Most of the time you want to allow symbols or strings when it comes to hash "named argument" style parameters, e.g. some_method(:name => "Dan") or some_method('name' => "Dan") should both be legal. Easy enough to do in pure Ruby, but more of a pain within a C extension.
I plagiarized this from some other source code:
VALUE v_pass;
if(st_lookup(RHASH(v_options)->tbl, rb_str_new2("password"), &v_pass) ||
st_lookup(RHASH(v_options)->tbl, rb_eval_string(":password"), &v_pass))
{
// Yep, password key/value pair was found.
}
The only downside is that I don't think st_lookup was generally meant for public consumption because running with -Wall emits a warning.
For Sapphire I plan on adding a generic hash function for C extension authors so you don't have to muck around with this.