ActionsLike0
Feature #14313
closedSupport creating KeyError with receiver and key from Ruby
Description
KeyError
has readers for error details, receiver
and key
. They are convenient to process KeyError
.
We can set receiver
and key
to KeyError
by rb_key_err_new()
in C. But we can't set them in Ruby. Because receiver
and key
use no @
instance variables.
How about adding KeyError#initialize
that accepts receiver
and key
? Because KeyError
is useful in pure Ruby libraries. For example, csv library uses KeyError
: https://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/lib/csv.rb?revision=59849&view=markup#l321
def fetch(header, *varargs)
# ...
raise KeyError, "key not found: #{header}"
# ...
end
I want to use KeyError
for Hash
like objects such as Arrow::Table
in Red Arrow.
The attached patch adds KeyError#initialize
that behaves as the following:
p KeyError.new.message
# => "KeyError": No change. Keep backward compatibility.
p KeyError.new("Message").message
# => "Message": No change. Keep backward compatibility.
p KeyError.new(receiver: Object.new).receiver
# => The Object instance.
p KeyError.new(key: :unknown_key).key
# => :unknown_key
key_error = KeyError.new(receiver: Object.new, key: :unknown_key)
p key_error.receiver
# => The Object instance.
p key_error.key
# => :unknown_key
key_error = KeyError.new("Message", receiver: Object.new, key: :unknown_key)
p key_error.message
# => "Message"
p key_error.receiver
# => The Object instance.
p key_error.key
# => :unknown_key
Files
Updated by nobu (Nobuyoshi Nakada) over 6 years ago
- Related to Bug #14670: Objectで定義したmethod_missingでsuperが使えない added
ActionsLike0