Skip to content

Instantly share code, notes, and snippets.

@headius
Created June 4, 2013 20:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save headius/5709175 to your computer and use it in GitHub Desktop.
Save headius/5709175 to your computer and use it in GitHub Desktop.
Cleaned up Hash#fetch impl in JRuby
@JRubyMethod(compat = RUBY1_9)
public IRubyObject fetch(ThreadContext context, IRubyObject key, Block block) {
Ruby runtime = context.runtime;
IRubyObject value = internalGet(key);
if (value == null) {
if (block.isGiven()) return block.yield(context, key);
throw runtime.newKeyError("key not found: " + key);
}
return value;
}
@JRubyMethod(compat = RUBY1_9)
public IRubyObject fetch(ThreadContext context, IRubyObject key, IRubyObject _default, Block block) {
Ruby runtime = context.runtime;
boolean blockGiven = block.isGiven();
if (blockGiven) {
runtime.getWarnings().warn(ID.BLOCK_BEATS_DEFAULT_VALUE, "block supersedes default value argument");
}
IRubyObject value = internalGet(key);
if (value == null) {
if (blockGiven) return block.yield(context, key);
return _default;
}
return value;
}
@jasim
Copy link

jasim commented Jun 13, 2013

Yes, this reads great.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment