【发布时间】:2019-11-12 04:32:37
【问题描述】:
目前,作为编码练习的一部分,我编写了以下代码,以将一组空格分隔的对从标准输入(作为受信任的源)读取到一个映射中,其中 nbElevators 是先前定义的:
(let [elevators (into {} (doall (repeatedly nbElevators #(do [(read) (read)]))))]
有没有更好的方法来做到这一点?
我不喜欢
#(do,但没有这个,Clojure 不断将repeatedly解释为尝试将向量调用为函数,而不是将向量的外观视为表示单一形式的函数它返回一个向量。这看起来很奇怪,因为表达式作为函数体是有效的(例如,(defn foo [] 2)有效),但(repeatedly 5 2)无效,(repeatedly 5 #(2))也无效 - 即使(repeatedly 5 (fn [] 2))有效,这意味着读取器宏中有一个漏洞。我在这里错过了什么语法吗?可以避免
doall吗?有没有办法自动缓存或指定输入,以便在延迟评估序列时读取文件中的正确位置?
【问题讨论】:
标签: clojure