Возможно ли иметь динамический вызов метода для значений параметров по умолчанию в Ruby? - PullRequest
7 голосов
/ 02 апреля 2012

У меня есть метод, который вызывает метод на целое число:

def print_time(time = 2.days.from_now)
  puts time
end

Я пытался в консоли, кажется, работает, но этот код безопасен? Я имею в виду, например:

  • Я запускаю свой сервер с включенным кэшированием кэша
  • Я вызываю метод, который печатает через 2 дня
  • 1 час спустя напечатанное значение будет действительно через 1 час + 2 дня?

Значение (2.days.from_now) не оценивается только один раз, когда метод определен?

Спасибо, что помогли мне уточнить! :)

Ответы [ 2 ]

15 голосов
/ 02 апреля 2012

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

2 голосов
/ 03 апреля 2012

Ну, ваш вопрос не совсем ясен.

Вы беспокоитесь о кешировании?Очевидно, что то, что оценивается и затем кэшируется (т. Е. С кэшированием действий или кэшированием страниц), не будет оцениваться снова до тех пор, пока кэш не будет очищен.

Или вас беспокоит кэширование значения аргумента по умолчанию при определенииметод, и все последующие вызовы могут иметь то же значение, что и значение по умолчанию?В этом случае тестирование вашей консоли было правильным, а @ Linux_iOS.rb.cpp.c.lisp.n (longest.name.evar) - корректно - Ruby каждый раз оценивает это выражение.

Из любопытстваЧто заставило вас усомниться в собственном тестировании в консоли?

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