Я провел пару лет, выполняя Схему «в тот же день», и теперь изучаю Clojure. Одной из «лучших практик» в Схеме было определение вспомогательных функций внутри родительской функции, что ограничивало их видимость «снаружи». Конечно, тогда TDD не было сделано (или не было!), Поэтому тестирование таких функций не было проблемой.Единичное тестирование локальных функций (letfn) в Clojure?
Я все еще испытываю соблазн структурировать функции Clojure таким образом; то есть, используя letfn для связывания вспомогательных функций в основной функции. Конечно, тестирование таких «локальных» функций проблематично. Я понимаю, что могу определить «частные» функции, но это позволяет видеть видимость в пространстве имен, которое помогает, но не так тонко. Если вы сталкиваетесь с letfn в рамках другой функции, довольно ясно, что эта функция недоступна для общего использования.
Итак, на мой вопрос, можно ли проверить такие локальные функции, и если да, то как? Если нет, то есть ли какое-то соглашение, помогающее в чтении кода, так что ясно, что функция имеет только один вызывающий?
ТИА, Билл
Почему модуль тестирует внутреннюю логику функции? Если он настолько сложный, что части должны тестироваться отдельно, есть преимущество в том, чтобы устанавливать определения в их собственных формах верхнего уровня. – noisesmith
Хм. Помимо видимости, есть проблема, что letfn может закрыть символ, «переплетая» его. –
Предоставляет ли система состояния Lisp возможность справиться с этой проблемой? Если да, то есть ли эквивалент Clojure? – Thumbnail