Допустим, у меня есть следующие два файла:Коварство/Схема - пересмотреть внутреннюю функцию другого модуля
;; demo.scm
(define-module (demo)
#:export (f))
(define (g x) 1)
(define (f x) (g x))
... и в том же каталоге:
;; use-demo.scm
(add-to-load-path ".")
(use-modules (demo))
(define (g x) (+ x 1))
(display (f 5))
(newline)
Запуск use-demo.scm
в Коварство (2), Я получаю вывод 1
. Таким образом, похоже, что функция f
«закрыла» функцию g
, которая определена в модуле demo
. Есть ли способ обойти это? Я действительно хочу использовать версию g
, которую я переопределил в use-demo.scm
.
Спасибо, Питер. Я закончил это: https://github.com/yawaramin/ggspec/blob/7feaef3b00348cac8415ec1f47d3057496b81009/lib.scm#L81 – Yawar
Хм. Ваша легкая структура модульного тестирования менее минимальна, чем моя (https://github.com/peter-b/geda-gaf/blob/master/libgeda/scheme/unit-test.scm). :-P Возможно, вы захотите украсть мою идею макроса 'assert-thrown'. –
Очевидно, что в «реальной программе» ваш макрос 'stub' может быть ярким, если работает более одного потока, но он выглядит как отличное решение для тестирования! –