Как не попасть в «ленивую оценочную ловушку» R

"R проходитобещания, а не значения. Обещание становится обязательным, когда его впервые оценивают, а не когда его передают. "этот ответ Г. Гротендик. Также смэтот вопрос ссылаясь на книгу Хэдли.

В простых примерах, таких как

> funs <- lapply(1:10, function(i) function() print(i))
> funs[[1]]()
[1] 10
> funs[[2]]()
[1] 10

можно принять во внимание такое неинтуитивное поведение.

Тем не менее, я часто попадаю в эту ловушку во время ежедневного развития. Я придерживаюсь довольно функционального стиля программирования, что означает, что у меня часто есть функция A, возвращающая функцию B, где B в некотором роде зависит от параметров, с которыми вызывается A. Зависимость не так легко увидеть, как в приведенном выше примере, так как вычисления сложны и есть несколько параметров.

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

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

Как я могу быть уверен, что не попаду в эту ловушку? Существуют ли какие-либо шаблоны программирования, которые препятствуют тому или иному, по крайней мере, убедиться, что я заметил, что есть проблема?

Ответы на вопрос(4)

Ваш ответ на вопрос