看到有人问
说是一个人问他写的一些没有参数的defn能否使用 def来替换;有人回答是如果你每次返回的结果是相同的那么就用def.可以见列子。
user=>(def t0 (System/currentTimeMillis))
user=>(defn t1 [](System/currentTimeMillis))
user=> t0
1318408644243
user=> t0
1318408644243
user=>(t1)1318408717941
user=>(t1)1318408719361
其实不然,def 定义也有返回不同的值的。
(def my-fn (comp + *))
tom.jerry1> (my-fn 22)
22
tom.jerry1> (my-fn 223)
223
defn 是一个封装了fn 和def的宏,定义完后可以在命名空间中使用
宏是没有参数,是在编译的时候生成适合的逻辑处理(宏只是一种具体的逻辑处理),fn 是匿名函数,
所以可以说是defn是一个预处理的函数;
def 其实是一个var,这个是占具体的内存空间,里面可以存变量,也可以是一段执行代码 defn 其实就是存在var中的一段fn函数代码。