Будет ли работать необязательный параметр в этом случае - PullRequest
0 голосов
/ 21 марта 2011

У меня есть такая функция:

def set_blah
   self.prop1 = .... if new_record?
end

Я хочу иметь возможность принудительного обновления, даже если в некоторых случаях это не новая запись, могу ли я просто добавить здесь дополнительный параметр, чтобы вседругие звонки, которые у меня уже есть, не прервутся?

т.е.

def set_blah ( force )
  self.prop1 = ... if new_record? || force
end

Ответы [ 3 ]

6 голосов
/ 21 марта 2011

Да, параметры по умолчанию просто указываются в сигнатуре метода:

def set_blah(force=false)
  do_something if new_record? || force
end

Вы можете попробовать использовать опции, чтобы сделать вашу вызывающую последовательность более читабельной:

def set_blah(options = {:force => false})
  do_something if new_record? || options[:force]
end

Если указать это явно, ваша вызывающая последовательность будет выглядеть примерно так:

set_blah

или

set_blah(:force => true)

, который, кажется, проясняет в точке вызова, что делает @ set_blah @. Кроме того, ваш rdoc покажет аргументы метода по умолчанию, так что это своего рода самодокументирование.

0 голосов
/ 21 марта 2011

Конечно, просто сделайте force параметром по умолчанию, чтобы вам не приходилось менять существующие вызовы на этот метод:

def set_blah(force = false)
    self.prop1 = ... if new_record? or force
end
0 голосов
/ 21 марта 2011

Да, вы можете теоретически использовать свой код как есть.Просто используйте set_blah (nil), когда вы не хотите форсировать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...