Сделать параметр ложным по умолчанию

Это распространенный способ установить значение по умолчанию в Ruby :

class QuietByDefault
  def initialize(opts = {})
    @verbose = opts[:verbose]
  end
end

. Это простая ловушка , в которую можно попасть:

class VerboseNoMatterWhat
  def initialize(opts = {})
    @verbose = opts[:verbose] || true
  end
end

Это правильный способ сделать это:

class VerboseByDefault
  def initialize(opts = {})
    @verbose = opts.include?(:verbose) ? opts[:verbose] : true
  end
end

Каков наилучший/самый чистый способ кодирования VerboseByDefault? (Конечно, я мог бы это учесть.)

Какой шаблон широко используется в коде Ruby в целом? Есть ли у ActiveSupport шаблон для этого? (Минимум лучше --Мне не нужен полный синтаксический анализатор параметров командной строки.)

Разглагольствование P.S. :Мне не нравится асимметрия между кодом, обрабатывающим параметр trueпо умолчанию, и кодом, обрабатывающим параметр falseпо умолчанию. Было бы неплохо увидеть шаблон, который позволяет переключаться между двумя --без возникновения ошибок --.

5
задан David J. 13 August 2012 в 17:39
поделиться