Иногда, просматривая код других людей Clojure, я вижу функцию, определенную через defn
, а затем вызывается с использованием синтаксиса var-quote, например:
user> (defn a [] 1)
#'user/a
user> (a) ; This is how you normally call a function
1
user> (#'a) ; This uses the var-quote syntax and produces the same result
1
В жизни я не могу понять разницу между этими двумя способами вызова функции. Я не могу найти ничего в документации evaluation, чтобы сказать, что происходит, когда оператор вызова является var, который может подсказать, почему второй форма была бы предпочтительнее. Они оба, кажется, отвечают тем же самым на binding
назначения и цитирование синтаксиса.
Итак, может ли кто-нибудь указать образец кода, который иллюстрирует разницу между (a)
и (#'a)
выше?
Изменить: Я знаю, что var-quote можно использовать для перехода к var, который затенен лексической привязкой let
, но это не похоже на код, который Я смотрю.