Ruby: Каков наилучший подход к устареванию только одного аргумента метода? - PullRequest
0 голосов
/ 22 апреля 2019

Рассматривая класс с методом, который раньше получал 2 аргумента, но теперь в новых версиях аргумент больше не нужен.Каков наилучший подход к устареванию аргумента этого метода?

В Ruby stdlib есть метод deprecate, который не поддерживает весь метод, но я все еще хочу, чтобы метод существовал, ему просто не нужен один изаргументы, которые он использовал для получения и уже являлся необязательным аргументом.

И пример будет

class DateValidator
  def date_valid?(date_string, fmt="%Y-%m-%d")
    # any check that does not even look for `_fmt` anymore
  end

Если я просто устарею от этого метода, предупреждение об устаревании будет отправлено, даже если кто-то вызоветметод без передачи второго аргумента.

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

Итак, как лучше всего предупредить об устаревании 2-го аргумента в этом примере?

1 Ответ

1 голос
/ 22 апреля 2019

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

  def date_valid?(date_string, fmt=nil)
    if fmt
      warn "second argument to `date_valid?` is deprecated (#{caller[-2]})"
    end
    fmt ||= "default value"
    # ... 
  end

Но, как я уже упоминал в комментарии, не уверен, зачем вообще отказываться от второго аргумента (это необязательно,в конце концов), если не важно, чтобы пользователь не настраивал это значение

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