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

标签 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 传递给关键字的参数数量错误::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 不需要括号。

ridclojure.lang.Keyword 类型,所以我们不能使用这个变量作为函数(在这种情况下/有时你可以使用关键字作为函数就像这样 (:foo {:foo 10}) ;;=> 10 )。

关于recursion - 使用 recur 时传递给关键字的参数数量错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36049728/

相关文章:

c - Hello world 加密对 main 的递归调用

javascript - 如何在 typescript 中找到树中的树

recursion - 与递归数据类型的统一

clojure - 在Clojure中定期执行代码

clojure - 仅当元素位于集合中时才从集合中删除元素

Android - 递归调用处理程序时出现垃圾收集器错误

c - 使用 Recursion 的层次结构树太大,导致文件搜索崩溃

audio - 为什么我的 Clojure 项目在 Raspberry Pi 上运行缓慢?

java - 让 Leiningen 在 Mac OS X 10.7.2 上运行

clojure - Clojure 的规范与 Wadler 的主张相同吗?