【问题标题】:Baffling ClojureScript Error令人费解的 ClojureScript 错误
【发布时间】:2012-06-13 09:28:46
【问题描述】:

代码

(defn sprintf [& args]
  (with-out-str
    (apply printf args)
    *out*))

错误

(Chrome)

Uncaught TypeError: Cannot read property 'cljs$lang$maxFixedArity' of undefined 

问题:

我做错了什么?

【问题讨论】:

    标签: clojure


    【解决方案1】:

    错误:

    Uncaught TypeError: Cannot read property 'cljs$lang$maxFixedArity' of undefined
    

    ...也许是历史上最莫名其妙的错误信息,实际上意味着:

    您在一个不存在(或不需要)的函数上调用 apply

    加油,未来的 Google 员工!

    【讨论】:

    • 对于那些在回答被接受很久后以完整解释回答的人来说,应该有更多的支持,因为您知道人们会通过 Google 搜索到达这里。你可能为我节省了很多时间。
    • 关于如何解决这个@kris-jenkins 的任何想法?我实际上正在使用 Meteor + ClojureScript,但也许您的想法会有所帮助。此时我有一个空的 Meteor 项目并收到此错误。
    • @JohnAllen 您需要找到它期望能够调用的函数。我这样做的两种方法是检查堆栈跟踪(如果您启用了源映射,您应该能够找到调用者);和干净的重建(这通常会触发编译器警告)。
    【解决方案2】:

    (def sprintf format) 似乎更容易。

    【讨论】:

    • 今天我明白了亚历山大大帝会如何攻击 Clojure 代码。
    • @amalloy 即使您提供了一个很好的解决方法,除了这个解决方法之外,还有其他方法可以解决原始问题吗?谢谢。
    • 不。我没有clojurescript经验;从提供的代码中我只能看出他在某处调用undefined,就好像它是一个函数一样。
    【解决方案3】:

    我没有收到您看到的错误,我收到错误“No *print-fn* fn set for evaluation environment”。

    如果您深入了解https://github.com/clojure/clojurescript/blob/master/src/cljs/cljs/core.cljs 的源代码,您会在 *print-fn* 的文档中找到此消息:

    “每个运行时环境都提供了不同的打印输出方式。 无论 *print-fn* 绑定到什么函数都将被传递 应该打印的字符串。”

    所以我建议你使用 *print-fn* - 或者按照 @amalloy 的建议,直接使用 'format'。

    (顺便说一句,如果您查看https://github.com/clojure/clojurescript/wiki/Differences-from-Clojure,它表示“*out* 当前未实现”。)

    【讨论】:

    • 这是因为没有设置*print-fn*,而不是因为发布的代码有错误。
    猜你喜欢
    • 2011-10-07
    • 1970-01-01
    • 2013-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多