У меня есть код для проверки nil в ruby. Поэтому я хочу достичь этого:
например, если я вызываю get_score_value(nil,(nil-1))
. Я хочу, чтобы ruby задерживал оценку nil-1
, пока не достигнет функции get_score_value
, вместо того, чтобы оценивать ее до того, как она будет передана в функции. Другими словами, я хочу передать математическое выражение в качестве аргумента в метод.
Какой самый элегантный способ сделать это в рубине? Большое спасибо
def get_score_value(value,value2)
value.nil? ? "NULL" : value2.round(2)
end
UPDATE:
Я только понял, что этот вопрос действительно связан с темой ленивой и строгой оценки. (следующее из этого замечательного сайта: http://www.khelll.com/blog/ruby/ruby-and-functional-programming/
Строгая и ленивая оценка
Строгая оценка всегда полностью оценивает аргументы функции перед вызовом функции. Ленивая оценка не оценивает аргументы функции, если их значения не требуются для оценки. Одно использование оценки Lazy - это увеличение производительности за счет исключения ненужных вычислений.
Однако, как показано в следующем примере, Ruby использует строгую стратегию оценки:
длина печати ([2 + 1, 3 * 2, 1/0, 5-4]) = > ZeroDivisionError: делится на 0
Третий параметр переданного массива содержит операцию деления на нуль и, поскольку Ruby выполняет строгую оценку, приведенный выше фрагмент кода вызывает исключение.