Hash#fetchの使いどころ
引数の順序に対する依存を取り除くため、初期化の際に引数にハッシュを渡す
このときにもしハッシュのキーが存在しなければデフォルト値を設定するために || [デフォルト値] のような書き方をしている
※ 以下のコードはオブジェクト指向設計実践ガイドから引用
def initialize(args)
@chainring = args[:chainring] || 40
@cog = args[:cog] || 18
@wheel = args[:wheel]
end
| この書き方でも良いのだが、bool値を設定したいときに呼び出し側でfalseを設定する場合に | は左辺がfalseかnilだと右辺を評価するのでtrueになってしまう問題が起きる |
# args[:piyo]がfalseだと右辺が評価されてtrueが入る
args = {piyo: false}
piyo = args[:piyo] || true
# => true
そこでこの問題を解決するためにfetchメソッドを使う
Hash#fetch (Ruby 3.2 リファレンスマニュアル)
こうすれば呼び出し側でfalseを設定する場合にも対応できる
args = {piyo: false}
piyo = args.fetch(:piyo, true)
# => false