Clojure:resolve和var之间的区别是什么?

Clojure:resolve和var之间的区别是什么?,clojure,symbols,var,Clojure,Symbols,Var,(解析…和(变量…)之间有什么区别?它们都接受一个符号并返回名称空间中的var。看起来resolve是一个以引号语法为参数的函数,而var是一种特殊形式,它采用在repl中键入的文字符号,但我不明白这些符号的用法会有什么不同 user> (def my-symbol 2.71828182846) #'user/my-symbol user> (resolve 'my-symbol) #'user/my-symbol user> (type (resolve 'my-symbol

(解析…
(变量…)
之间有什么区别?它们都接受一个符号并返回名称空间中的var。看起来resolve是一个以引号语法为参数的函数,而var是一种特殊形式,它采用在repl中键入的文字符号,但我不明白这些符号的用法会有什么不同

user> (def my-symbol 2.71828182846)
#'user/my-symbol
user> (resolve 'my-symbol)
#'user/my-symbol
user> (type (resolve 'my-symbol))
clojure.lang.Var
user> (var my-symbol)
#'user/my-symbol
user> (type (var my-symbol))
clojure.lang.Var
user> (= (resolve 'my-symbol) (var my-symbol))
true

resolve
查找给定符号的变量(或类),并在运行时运行
var
只返回一个var并在编译时操作
(var foo)
#'foo

(def foo "bar")
=> #'user/foo

(let [sym 'foo]
  (resolve sym))
=> #'user/foo

(let [sym 'foo]
  (var sym)) ;same as typing #'sym - doesn't actually refer to the sym local
=> Exception: Unable to resolve var: sym in this context

谢谢,那我什么时候用一个和另一个?