Ruby 2.6 KeyError#initialize接受消息、接收器和密钥作为参数
Ruby 2.6.0-preview2最近发布了。
Ruby 2.5.0引入了公共实例方法 KeyError#key和 KeyError#receiver.你可以在这里阅读我之前关于KeyError#key &KeyError#receiver 的博客。
Rubycsv 库在没有找到字段时,会在 KeyError当字段没有被找到时,在CSV::Row#fetch 方法上引发一个
def fetch(header, *varargs)
# ...
raise KeyError, "key not found: #{header}"
# ...
end
与其引发如上所示的KeyError,不如这样做如何?
raise KeyError.new("key not found", key: header)
有了这个,我们可以使用Ruby 2.5.0中引入的KeyError#message 和KeyError#key 方法来检查KeyError对象的错误信息和密钥:
begin
raise KeyError.new('key not found', key: :unknown)
rescue StandardError => error
p error.message #=> "key not found"
p error.key #=> :unknown
end
有人建议引入KeyError#initialize 方法,该方法接受message,receiver 和key 作为参数,以在KeyError 对象上设置它们,该方法被批准。
Ruby 2.6.0
在Ruby 2.6.0中,KeyError#initialize 接受message,receiver, 和key 作为参数,其中message 是一个默认参数,默认值为nil 。
KeyError#initialize
>> error = KeyError.new
=> #<KeyError: KeyError>
KeyError#message
>> error.message
=> "KeyError"
>> error = KeyError.new('Message')
=> #<KeyError: Message>
>> error.message
=> "Message"
当message 没有传递给KeyError ,它就会设置class name 作为消息。
KeyError#initialize带有message, :receiver 和 :key
>> error = KeyError.new('Message', receiver: Object.new, key: :unknown)
=> #<KeyError: Message>
>> error.message
=> "Message"
>> error.receiver
=> #<Object:0x0000561132683d48>
>> error.key
=> :unknown
我希望KeyError 类的这些方法参数对你未来的调试尝试是有用的。