【问题标题】:Macros in the Cider repl (e.g. ->)Cider repl 中的宏(例如 ->)
【发布时间】:2016-03-21 21:43:44
【问题描述】:

为什么使用线程宏 ->> 在 cider-repl 中产生错误:

(-> "x..")

//  Unable to resolve symbol: -> in this context

【问题讨论】:

    标签: emacs clojure cider


    【解决方案1】:

    当您在 repl 中创建一个新的命名空间并且尚未在其中定义 anything 时,就会发生这种情况。因此 clojure.core 函数的别名尚未建立:

    首先创建一个新的空白命名空间:

    user> (in-ns 'i-dont-exist-yet)
    #namespace[i-dont-exist-yet]
    

    然后尝试使用线程宏(或来自 clojure.core 的任何东西):

    i-dont-exist-yet> (-> 1)
    CompilerException java.lang.RuntimeException: Unable to resolve symbol: -> in this context, compiling:(*cider-repl api*:47:18) 
    

    它无法在当前命名空间中查找符号->,但如果你明确告诉它要使用哪个命名空间,它就可以工作:

    i-dont-exist-yet> (clojure.core/-> 1)
    1
    

    clojure.core 中有一个方便的函数,可以为您的新命名空间添加所有预期的引用。当您从顶部带有 ns 宏的文件创建命名空间时,您无需执行此操作,因为 ns 会为您执行此操作(以及其他有用的操作):

    i-dont-exist-yet> (clojure.core/refer-clojure)
    nil
    i-dont-exist-yet> (-> 1)
    1
    

    【讨论】:

    • 酷,谢谢。我发现仅仅更改为 cider repl 中的命名空间(通过 in-ns..)是不够的。然而,C-c M-n 完成了这项工作。
    猜你喜欢
    • 2015-03-21
    • 2015-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-16
    • 1970-01-01
    • 2014-08-22
    • 2015-10-27
    相关资源
    最近更新 更多