【问题标题】:What's the difference between use and :use in the ns macrons宏中的use和:use有什么区别
【发布时间】:2017-01-17 23:54:54
【问题描述】:

ns 宏中的use:use 有什么区别?

Docs 说如下:

Use :use in the ns macro in preference to calling this directly

【问题讨论】:

    标签: clojure


    【解决方案1】:

    这有点混乱。

    ns 表单中,您要使用关键字版本(:require ...),例如:

    (ns clj.core
      (:require [tupelo.core :as t] ))
    

    您应该认为这是“正常”的做事方式。

    另一个不带冒号的版本是一个同名的函数,可以在 REPL 调用,以防你不能或不想使用ns 表单。这看起来像:

    > lein repl
    user=> (require '[tupelo.core :as t] )
    nil
    user=> (t/append [1 2 3] 4)
    [1 2 3 4]
    

    请注意: 对于 repl/function 版本,您还必须引用包含命名空间规范的向量。请注意,我们没有使用:require 引用ns 版本中的规范。

    或者,如果您已经在编辑器中并且只想在 REPL 中快速测试一些东西,您可以从文件顶部剪切/粘贴整个 ns 表单到 REPL:

    > lein repl
    user=> (ns clj.core
      #_=>   (:require [tupelo.core :as t] ))
    user=>
    

    这比手动输入功能版本更容易且不易出错。

    如需全面了解,请在此处查看最近的博文:https://stuartsierra.com/2016/clojure-how-to-ns.html

    【讨论】:

    • 另见this thread
    • 要明确一点:使用 REPL 中的函数形式 (use ...)(require ...) 是完全可以接受的。事实上,在这种情况下它可能是首选。但是在你的源代码文件中,你应该把所有这些都放在(ns ...) 表单中,除非绝对不可能(例如,循环依赖或其他东西)。
    猜你喜欢
    • 2016-09-01
    • 1970-01-01
    • 2014-06-18
    • 2015-08-03
    • 1970-01-01
    • 2010-11-25
    • 2020-11-07
    • 2020-10-26
    • 2017-01-18
    相关资源
    最近更新 更多