【问题标题】:Clojure - map with unbound functionClojure - 具有未绑定函数的映射
【发布时间】:2015-02-04 06:13:32
【问题描述】:

我正在学习 Try Clojure 中的 Clojure 教程,其中介绍了如何定义函数 -

(defn square [x] (* x x))

然后将其应用于数字列表:

(map square [1 2 3 4])

立即打印出错误:java.lang.IllegalStateException: Attempting to call unbound fn: #'sandbox14750/square

当我尝试映射例如函数 inc 时,效果很好 - 内置函数 inc 和我的 square 有什么区别?

【问题讨论】:

  • 我刚刚在 Try Clojure 中尝试过这个,它成功了。几天前,我在使用 Try Clojure,但它丢失了我定义的变量。在我定义它们和引用它们之间有几分钟的时间,所以我把它塞进了沙盒回收资源。
  • 当我第一次尝试使用 TryClojure 时,它​​运行良好。在注意到您对我的答案的评论后,我再次尝试,我遇到了同样的问题。但是,它现在有效。我不确定发生了什么。无论如何,你的代码是好的。我怀疑该网站存在一些内部问题。
  • 好的 - 我真的会在真正的 clojure REPL 中尝试。
  • 你能再试一次吗?我似乎记得 try-clj 有时会随机重置沙箱,这会导致旧定义消失
  • "如果你定义的东西太多,或者在 15 分钟后,解释器会删除你输入的数据"

标签: clojure


【解决方案1】:

我第一次尝试运行它时遇到了一些麻烦,但刷新页面后它运行正常。

Give me some Clojure:
> (defn square [x] (* x x))
#'sandbox6361/square
> (square 4)
16
> (map square [1 2 3 4])
(1 4 9 16)

如果您想确保您的函数在需要时仍然可用,您可以将函数存储在 locals 中,而不是像这样的 vars:

> (let [square (fn [x] (* x x))] (map square [1 2 3 4]))
(1 4 9 16)
>  

#clojure 上的 Clojurebot 等许多沙化环境不允许您定义任意状态,因此值得了解的是函数可以以多种方式存储,而不仅仅是在 vars 中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多