Переопределение переменных только в теле with-redefs, а не в вызываемых функциях - PullRequest
0 голосов
/ 08 ноября 2019

Я знаю, как использовать with-redefs, чтобы заглушить переменные при тестировании, например. Мне было интересно, возможно ли сохранить переопределения эксклюзивно только для непосредственного тела кода, чтобы оно не влияло ни на какие впоследствии вызываемые функции. Например:

(defn foo [] (println "foo")

(with-redefs [println (constantly nil)]
    (println "bar")
    (foo))

Ничего не печатает, но если бы можно было сделать то, что я описываю, мы увидели бы только напечатанное foo , так как println сохранит свое первоначальное значение ввызываемая функция foo. Это вообще возможно?

1 Ответ

3 голосов
/ 08 ноября 2019

Вы хотите прямо противоположное with-redefs здесь: простая старая лексическая тень:

(defn foo [] (println "Foo you."))

(println "to Foo, or not to Foo...")
(let [println (constantly nil)]
  (println "Foo me not.")
  (foo))
(println "...that is the question.")

с результатом:

to Foo, or not to Foo...
Foo you.
...that is the question.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...