У программиста в проекте встречался примерно такой код:
Но вот беда: при некоторых сочетаниях параметров код некорректно завершается.
Например, f(g(25),144)
работает нормально, а f(g(50),1134903170)
– падает.
Для отладки программист добавил отладочную печать промежуточных значений:
Удивительно, но с отладочной печатью все сработало правильно!
Впрочем, появился ворнинг:
Функция g
выполняется в списковом контексте,
а в списковом контексте return
без параметра возвращает пустой список,
и при интерполяции всех параметров для f
получается список из одного элемента: (1134903170)
.
Таким образом, первоначальный вызов f(g(50),1134903170)
равнозначен f(1134903170)
,
то есть порядок аргументов f
портится.
С отладочной же печатью получается f(undef, 1134903170)
.
Мораль: если функция используется ради возвращаемого значения (не ради побочных эффектов)
– лучше избегать в ней оператора return
без параметра.