Есть ли более сжатый и идиоматический способ написать следующий код, который используется для указания значений по умолчанию для необязательных параметров (в хеше params/options) методу?Есть ли идиоматический способ указать значения по умолчанию для необязательных параметров в Ruby?
def initialize(params={})
if params.has_key? :verbose
@verbose = params[:verbose]
else
@verbose = true # this is the default value
end
end
Я хотел бы, чтобы упростить его к чему-то вроде этого:
def initialize(params={})
@verbose = params[:verbose] or true
end
какие почти работ, за исключением того, что вам действительно нужно использовать has_key? :verbose
как условие, вместо того, чтобы просто оценить params[:verbose]
, в чтобы охватывать случаи, когда вы хотите указать значение «false» (т. е. если вы хотите передать :verbose => false
в качестве аргумента в этом примере).
Я понимаю, что в этом простом примере я мог бы легко сделать:
def initialize(verbose=false)
@verbose = verbose
end
, но в моем реальном коде я на самом деле есть куча дополнительных параметров (в дополнение к нескольким искомыми) и я например, поставить необязательные в хэши params, чтобы я мог просто указать (по имени) несколько, которые я хочу, вместо того, чтобы перечислить их всех по порядку (и, возможно, их список, которых я действительно не хочу) ,
У Perl теперь есть // = синтаксис, чтобы обойти проблему проверки ложных значений таким образом. Я знаю, что это не помогает. Вот почему это комментарий, а не ответ ... – mopoke