【问题标题】:Clojure rename loaded librariesClojure 重命名加载的库
【发布时间】:2011-01-05 20:29:27
【问题描述】:

当您使用requireuse 加载clojure 库时,有什么方法可以重命名它们?

例如,有没有办法做类似的事情

(require 'some.include.path.some-library :as something-else)

然后引用some-librarysomething-else/element-name 的元素?

谢谢。

【问题讨论】:

    标签: clojure


    【解决方案1】:

    看看http://clojure.org/libs

    一个带有嵌入式解释的简单库:

    (ns com.my-company.clojure.examples.my-utils
      (:import java.util.Date)
      (:use [clojure.contrib.def :only (defvar-)])
      (:require [clojure.contrib.shell-out :as shell]))
    
    • ns 表单命名 lib 的命名空间并声明其依赖项。根据其名称,此库必须包含在 Java 资源中的类路径相对路径中:com/my_company/clojure/examples/my_utils.clj(注意从句点到斜杠和连字符到下划线的翻译)。
    • :import 子句声明此库对 java.util.Date 的使用,并使其可用于此库中使用其非限定名称的代码。
    • :use 子句仅针对其 defvar- 函数声明对 clojure.contrib.def 库的依赖。 defvar- 可以在这个库的代码中使用它的非限定名称。
    • :require 子句声明对 clojure.contrib.shell-out 库的依赖,并允许使用较短的命名空间别名 shell 使用其成员。

    【讨论】:

    • :use:require 之间的关键区别只是后者的别名能力吗? use 的文档提到它类似于 require,但也将 refer 应用于参数。我很难记住这些差异。
    • 是的,但是有没有办法(需要 [clojure.contrib :as contrib])然后引用 clojure.contrib 中的对象,例如 contrib/def 而不是 clojure.contrib/def ?
    • 命名空间不形成层次结构。你可以做(require [clojure.contrib.def :as d]) 然后访问例如。 defvard/defvarclojure.contrib 如果没有该名称的命名空间,则除了作为符号之外没有任何意义。所以你想要的都是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多