概要
可変長のリストとオプション(ハッシュ)の引数を共存させる場合
詳細
可変長のリストとオプション(ハッシュ)の引数を共存させる場合について。
ActiveSupportのdelegateメソッドを呼んでいて、このパターンのコードがあったのでまとめます。
delegateメソッドでの利用例はoptionsに少なくとも1つの値があることを前提としていましたが
この記事のサンプルはオプションが指定されなかった場合も考慮します。
サンプル
# encoding: utf-8 require 'tbpgr_utils' def some_method(*args) options = args.last.is_a?(Hash) ? args.pop : {} message = args.join message += options[:語尾] if options[:語尾] message = "#{options[:装飾]}#{message}#{options[:装飾]}" if options[:装飾] message end bulk_puts_eval binding, <<-EOS some_method "今日は", "とても", "いい天気", 語尾: 'どすえ' some_method "今日は", "とても", "いい天気", 語尾: 'っすね', 装飾: '★' some_method "今日は", "とても", "いい天気" some_method "今日は", "とても", "いい天気", 装飾: '☆' EOS __END__ 下記はTbpgrUtils gemの機能 bulk_puts_eval 詳しくは下記参照 https://rubygems.org/gems/tbpgr_utils https://github.com/tbpgr/tbpgr_utils
出力
some_method "今日は", "とても", "いい天気", 語尾: 'どすえ' # => "今日はとてもいい天気どすえ" some_method "今日は", "とても", "いい天気", 語尾: 'っすね', 装飾: '★' # => "★ 今日はとてもいい天気っすね★" some_method "今日は", "とても", "いい天気" # => "今日はとてもいい天気" some_method "今日は", "とても", "いい天気", 装飾: '☆' # => "☆今日はとてもいい天気☆"