🐈
[Feature #14602] 見つからなかったときに例外を発生させる #dig! を追加する提案
[Feature #14602] Version of dig that raises error if a key is not present
- ネストして Hash を参照する時に指定したキーがみつからなかったら
KeyError
を発生させる#dig!
を追加する提案- 要は
#dig
でみつからなかったら例外を排出する版
- 要は
- 現状、同等のことをしたい場合は以下のように
#fetch
をネストして参照する必要がある
hash = {
:name => {
:first => "Ariel",
:last => "Caplan"
}
}
# OK
hash.fetch(:name).fetch(:first)
# Error: key not found: :middle (KeyError)
hash.fetch(:name).fetch(:middle)
-
#dig!
のイメージは以下のような感じ
hash = {
:name => {
:first => "Ariel",
:last => "Caplan"
}
}
hash.dig!(:name, :first) # => Ariel
hash.dig!(:name, :middle) # raises KeyError (key not found: :middle)
hash.dig!(:name, :first, :foo) # raises TypeError (String does not have #dig! method)
-
hash.dig(:name, :middle, raise_error: true)
みたいな感じで#dig
にキーワード引数を追加する案もでているんですが現状だとキーワード引数は位置引数に置き換えられて動いているので互換性がないらしい
hash = {
:name => {
:middle => {
{ :raise_error => true } => 2
}
}
}
# raise_error: true 自体が Hash 値になり、それがキーの値として処理される
p hash.dig(:name, :middle, raise_error: true)
# => 2
- 機能自体は matz も同意しているのであとはいい感じの名前が決まれば、って感じぽい
Discussion