我是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 Wrong number of args passed to keyword: :1 clojure.lang.Keyword.throwArity (Keyword.java:97)
我花了几个小时找到原因,但我找不到解决办法。我的循环有一个参数rid
所以recur
应该有一个参数?
答案 0 :(得分:4)
(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
)。< / p>