clojure – 为什么LET不能与VECTOR一起使用?

代替

(let [x 1] (my-expression))

我正在尝试使用:

(let (vector x 1) (my-expression))

不要问为什么,我更喜欢普通的括号.但是Clojure说:

let requires a vector for its binding in ...

怎么了?

解决方法

let special form binding form必须是矢量文字,而不仅仅是一个评估为矢量的表达式.

为什么?粗略地说,必须先编译表达式,然后才能对其进行求值.在编译时(向量x 1)将不会被评估为向量,它将只是一个列表.实际上,如果要进行评估,将评估向量的参数,这意味着必须解决x.但是,您不希望x被解析,您希望它被绑定.

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...