Clojure 可变记录探头的返回值
我希望此函数准确返回它传递的内容(已作为参数传递): 当Clojure 可变记录探头的返回值,clojure,clojurescript,Clojure,Clojurescript,我希望此函数准确返回它传递的内容(已作为参数传递): 当txts被返回时,这与传入的调用方不完全相同 一旦这个问题得到回答,我将有一个日志功能,可以作为一个探测器使用-能够包装在任何现有的函数调用,而不改变程序做什么 下面是一个REPL友好的示例(复制和粘贴,以及修改为适用于Clojure的日志函数),它显示日志记录会影响输出: (def infos [{:colour [0,0,139]} {:colour [255,255,0]} {:colour [0,0,0]} {:colour [25
txts
被返回时,这与传入的调用方不完全相同
一旦这个问题得到回答,我将有一个日志功能,可以作为一个探测器使用-能够包装在任何现有的函数调用,而不改变程序做什么
下面是一个REPL友好的示例(复制和粘贴,以及修改为适用于Clojure的日志函数),它显示日志记录会影响输出:
(def infos [{:colour [0,0,139]} {:colour [255,255,0]} {:colour [0,0,0]} {:colour [255,0,0]}])
(defn log [& txts]
(println (apply str txts))
txts)
(defn random-colour-logged
[]
(let [colour-idx (rand-int 4)]
(log (:colour (get infos colour-idx)))))
(defn random-colour-not-logged
[]
(let [colour-idx (rand-int 4)]
(:colour (get infos colour-idx))))
(random-colour-logged)
(random-colour-logged)
(random-colour-not-logged)
(random-colour-not-logged)
这是我刚刚收到的输出:
user=> (random-colour-logged)
[255 255 0]
([255 255 0])
user=> (random-colour-logged)
[0 0 139]
([0 0 139])
user=> (random-colour-not-logged)
[255 255 0]
user=> (random-colour-not-logged)
[255 0 0]
当您将函数定义为
(defn log [& txts]
...
txts)
这意味着您可以传递任意数量的参数,然后将这些参数收集到一个列表txts中。因此,案例中的返回值是一个列表
所以当你打电话的时候
(random-colour-logged)
txts的值将是单个向量的列表:
'([255 255 0])
这发生在示例中(函数内部):
尝试将函数更改为
(defn log [txt]
(.log js/console txt)
txt)
它应该可以正常工作
编辑:
您还可以更改调用日志函数的方式:
(defn random-colour-logged
[]
(let [colour-idx (rand-int 4)]
(apply log (:colour (get infos colour-idx)))))
这样,您记录的内容和函数返回的内容都将是相同的数字列表。您可以添加一个示例吗?您所说的“不完全相同”是什么意思?此函数应返回传入的参数列表。(def big word“varadic”)(log“但它将不再是”big word)请参见我的编辑。如果您不想为您的案例实现自定义日志记录,那么在这里您可以做的事情就不多了。有比在日志调用之前放入
apply
更简单的解决方法。即使如此,我还是复制/粘贴了你的随机颜色记录的
——在REPL中,你仍然可以看到“记录”和“未记录”调用的不同结果。我要使用的实际解决方法是使用一个名为wrap
的函数,它是日志
的非变量版本。我将使log
不返回任何内容。
(defn log [txt]
(.log js/console txt)
txt)
(defn random-colour-logged
[]
(let [colour-idx (rand-int 4)]
(apply log (:colour (get infos colour-idx)))))