Объясните мне, что грандиозное предприятие с оптимизацией последнего вызова и почему для Python нужен он

Это отличный вопрос. Вот как я бы это сделал:

Поскольку у вас уже есть угловые модульные тесты для соответствующих директив и модулей, это прекрасно.

Еще одна отличная вещь - это то, что тесты интеграции вашего сервера обращаются к реальной базе данных, а также проверяют работу остальных API через http.

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

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

Также хорошее чтение: http://blog.ericbmerritt.com/2014/03/25/mocking-is-evil.html

20
задан GS - Apologise to Monica 10 June 2009 в 12:28
поделиться

3 ответа

Лично я очень ценю оптимизацию хвостовых вызовов; но главным образом потому, что он делает рекурсию такой же эффективной, как и итерация (или делает итерацию подмножеством рекурсии). На минималистичных языках вы получаете огромную выразительную силу без ущерба для производительности.

На «практическом» языке (таком как Python), OTOH, у вас обычно есть много других конструкций почти для каждой мыслимой ситуации, поэтому это менее критично. Всегда полезно иметь при себе, конечно, на случай непредвиденных ситуаций

14
ответ дан 30 November 2019 в 00:43
поделиться

Если вы сильно хотите использовать рекурсию для вещей, которые в качестве альтернативы могли бы быть выражены в виде циклов, тогда "оптимизация хвостового вызова" действительно необходима. Однако Гвидо, программа «Доброжелательный диктатор на всю жизнь» Python (BDFL), твердо верит в то, что циклы выражаются в виде циклов, поэтому он не собирается использовать хвостовые вызовы в особых случаях (жертвуя дампами трассировки стека и регулярностью отладки).

6
ответ дан 30 November 2019 в 00:43
поделиться

Оптимизация хвостового вызова упрощает написание рекурсивных функций, не беспокоясь о переполнении стека:

def fac(n, result=1):
        if n > 1:
                return fac(n - 1, n * result)
        return result

Без оптимизации хвостового вызова вызов этого с большим числом может вызвать переполнение стека.

5
ответ дан 30 November 2019 в 00:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: