1. ホーム
  2. ruby

[解決済み] ハッシュを扱うときのfetchと[]の違い?重複

2023-06-09 08:33:32

質問

Ruby公案より about_hashes.rb :

なぜ #fetch の代わりに #[] に変更することはできますか?

どのように解決するのですか?

デフォルトでは #[] を使うと、ハッシュ値が存在する場合はそれを取得し、存在しない場合はnilを返します *。

使用方法 #fetch を使うと、いくつかのオプションがあります (詳しくは #fetch ):

  • fetch(key_name) : キーが存在する場合は値を取得し、キーが存在しない場合は KeyError を送出します。
  • fetch(key_name, default_value) : キーが存在する場合に値を取得し、その値を元に default_value それ以外の場合は
  • fetch(key_name) { |key| "default" } : キーが存在すれば値を取得し、そうでなければ与えられたブロックを実行し、値を返します。

それぞれは状況に応じて使い分ける必要がありますが #fetch は非常に機能が豊富で、使い方次第で様々なケースに対応できます。そのため、私は、キーにアクセスする際に #[] .

* Marc-André Lafortune が言ったように、キーにアクセスする際に #[] でキーにアクセスすると #default_proc を呼び出すか、さもなければ #default を返しますが、デフォルトは nil . 参照 のドキュメントエントリを参照してください。 ::new をご覧ください。