связывание со связыванием в clojure - PullRequest
1 голос
/ 06 октября 2019

Существует два макроса binding и with-bindings для переопределения динамических переменных. Однако, похоже, что у обоих есть утилита, в чем разница между ними?

;; binding
(def :^dynamic a 10)
(binding [a 20] a) ;; => 20
a ;; => 10

;; with-bindings
(with-bindings {#'a 20}
  a) ;; => 20
a ;; => 10

они оба изменяют динамическую область действия для каждого потока и возвращают ее в корневую привязку после окончания лексической области действия.

1 Ответ

2 голосов
/ 06 октября 2019

Базовая реализация обоих в значительной степени идентична:

  • принудительные привязки потоков (с использованием прилагаемых привязок)
  • попытка тела
  • наконец, всплывающие привязки потоков

binding был добавлен в Clojure 1.0 и with-bindings в 1.1. Я не вижу, чтобы последний использовался в каком-либо коде, кроме первого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...