我是 Clojure 新手。这是我的代码:
(defn startgame [room-id]
(loop [rid room-id]
(println (clojure.string/join " "(get-room-description rid)))
(let [rid (keyword (read-line))]
(if (= rid :0)
"bye bye"
(recur (rid)))
)))
它编译得很好,但是当它到达 recur(rid)
行时运行它时,它会抛出错误:
IllegalArgumentException 传递给关键字的参数数量错误::1 clojure.lang.Keyword. throwArity (Keyword.java:97)
我花了几个小时来查找原因,但找不到解决方案。我的循环有一个参数 rid
所以 recur
应该有一个?
最佳答案
(defn startgame [room-id]
(loop [rid room-id]
(let [rid (keyword (read-line))]
(if (= rid :0)
"bye bye"
(recur rid)))))
rid
不需要括号。
rid
是 clojure.lang.Keyword
类型,所以我们不能使用这个变量作为函数(在这种情况下/有时你可以使用关键字作为函数就像这样 (:foo {:foo 10}) ;;=> 10
)。
关于recursion - 使用 recur 时传递给关键字的参数数量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36049728/