Думаю, на этот вопрос уже будет ответ, но не смог его найти. Я выполнял синтаксический анализ параметров метода определенным образом и хотел проверить и убедиться, что это наиболее элегантный / лаконичный способ из возможных.
Это то, что я обычно делаю:
def some_method *args
options = args.extract_options!
options.assert_valid_keys(:key1, :key2)
defaults = {:key1 => "one", :key2 => "two"}
options = defaults.merge(options)
general_arguments = args[0]
Это, очевидно, предназначено для того, чтобы у меня были вызовы методов вроде:
some_method @user.id, :key1 => "good"
Это работает, но кажется немного длинным для Руби, и, поскольку это своего рода мой "общий паттерн", мне интересно, действительно ли я должен так поступать. Есть ли лучший, более лаконичный или более «рубеский» способ анализа общих параметров?
Предположения
- Агрессивная защита - я предполагаю, что методы в публичном API предлагаются через плагин gem или gemmable
- Значения по умолчанию желательны в основном для просмотра шаблонов, которые используют другие
- Потенциально принято более одного безымянного параметра перед хэшированием