使用recur时传递给关键字的args数量错误

时间:2016-03-17 00:50:57

标签: recursion clojure

我是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应该有一个参数?

1 个答案:

答案 0 :(得分:4)

(defn startgame [room-id]
  (loop [rid room-id]
    (let [rid (keyword (read-line))]
      (if (= rid :0)
        "bye bye"
        (recur rid)))))

rid不需要括号。

ridclojure.lang.Keyword类型,因此我们不能将此变量用作函数(在这种情况下/有时您可以将关键字用作此函数(:foo {:foo 10}) ;;=> 10)。< / p>