代码之家  ›  专栏  ›  技术社区  ›  yayitswei

如何使用我自己版本的Clojure库?

  •  7
  • yayitswei  · 技术社区  · 15 年前

    我希望能够调整库和我的项目在同一时间(最好在REPL)。如果我在Ruby中这样做,我会下载gem并“要求”它,然后在我自己的项目源代码中重新打开该类,并根据需要添加或重写这些方法。

    3 回复  |  直到 10 年前
        1
  •  8
  •   John Lawrence Aspden    15 年前

    你可以直接攻击REPL。假设你的类路径上有白炽灯。 启动REPL。我们要做的第一件事就是把白炽灯类引入其中。

    user> (require 'incanter.core)
    nil
    

    现在我们可以看到函数了白炽灯。核心/矩阵?

    user> (incanter.core/matrix? 2)
    false
    

    user> (require 'clojure.repl)
    nil
    user> (clojure.repl/source incanter.core/matrix?)
    (defn matrix?
      " Test if obj is 'derived' incanter.Matrix."
      ([obj] (is-matrix obj)))
    nil 
    

    我们去搞砸吧:

    第一次更改为白炽灯芯命名空间:

    user> (in-ns 'incanter.core)
    #<Namespace incanter.core>
    

    incanter.core> (defn matrix? [obj] "hello")
    #'incanter.core/matrix?
    

    单元测试:

    incanter.core> (matrix? 2)
    "hello"
    

    切换回用户命名空间:

    incanter.core> (in-ns 'user)
    #<Namespace user>
    

    试一试:

    user> (matrix? 2)
    ; Evaluation aborted.
    

    user> (incanter.core/matrix? 2)
    "hello"
    

    在repl上进行实验时,只需更改源文件并重新编译单个文件(emacs中的C-C-k)就可以了,或者如果您的名称空间正确,只需重新计算定义。

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    现在,如果我们想使我们有价值的改变永久化,并可用于其他项目,这取决于如何设置一切。

    对于maven项目,这应该像

    $ mvn install
    

    关于版本号的说明:

    然后修改自己的项目文件,确保在需要的地方使用黑客版本,下一次启动repl时,它应该会引入上次安装的黑客版本。

    每次希望更改进入存储库时,都需要重新安装,但这实际上可能是一件好事。

    您可以在此处获取白炽灯的来源:

    http://github.com/liebke/incanter.git

    相关的源文件是:

    ~/白炽灯/模块/白炽灯芯/src/白炽灯/核心.clj

    修改它来打破矩阵?然后你要做的是:

    目前,这一切似乎都是不必要的复杂。我(相当)肯定,随着工具的成熟,它会稳定下来。

        2
  •  4
  •   Rayne    15 年前

    如果您正在使用(或不介意使用) cake ,请查看自述文件的子项目依赖项部分。我想这正是你想要的。

        3
  •  -1
  •   Hamza Yerlikaya    15 年前

    推荐文章