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

Wrong number of args passed to keyword when using recur

提问人:blekione 提问时间:3/17/2016 更新时间:3/17/2016 访问量:746

问:

我是 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)

我花了几个小时来寻找原因,但我找不到解决方案。我的循环有一个参数,所以应该有一个吗?ridrecur

递归 Clojure(克洛朱尔酒店)

评论

0赞 ayato_p 3/17/2016
什么?get-room-description

答:

4赞 ayato_p 3/17/2016 #1
(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