Clojure:在特定命名空间中启动 repl

2024-04-20

我安装了 boot-clj,并且希望能够在外部编辑器中编辑 .clj 文件,并单独运行一个命令行 REPL,我可以从中调用我在 .clj 文件中更改的函数。不需要特殊的重新加载命令。

另一件事是我不想手动键入命令来包含命名空间 - 我只想运行一个将我带入命名空间的脚本,这样我就可以立即调用现有函数。

文件名:

C:\dev\my-project\src\my_project\utils.clj

文件内的一些内容:

(ns my-project.utils
  (:require
    [clojure.string :as s]))

(defn my-range [start end]
  (take (- end start) (iterate inc start)))

我想直接进入 REPL 并继续(my-range 0 3)看看它是否会产生我想要的结果。

这是什么设置?我需要运行的脚本文件是什么样的?

我目前的理解是答案看起来像这样:

(deftask dev-repl
  (set-env! …)
  (repl))

在命令行

您可以通过命令行在某种程度上实现这一点,而无需创建build.boot file:

在 C:\dev\my_project 中:

boot -r src repl -n my-project.utils
  • boot -r src: 开始启动src在“资源路径”上,这是可在 JVM 中访问的目录集。
  • repl -n my-project.utils启动 REPL,需要您的命名空间,然后输入它。

当 REPL 运行时以及编辑后C:\dev\my_project\src\my_project\utils.clj,您可以像这样在 REPL 中重新加载它:

my-project.utils=> (require 'my-project.utils :reload)
nil

minimal build.boot

或者,您可以创建文件C:\dev\my_project\build.boot包含这些内容:

(set-env! :resource-paths #{"src"})

(deftask dev 
  "Run a development REPL"
  []
  (repl :init-ns 'my-project.utils))

然后,在C:\dev\my_project:

boot dev

这也会在你的命名空间中启动 REPL,但需要更少的命令行配置,因为我们已经在build.boot, which boot会自动评估。

注意:在 Clojure REPL 中,无论使用哪种构建工具,您都可以使用以下命令来请求任何命名空间(只要它位于 JVM 的类路径上):require函数并输入in-ns功能。

自动重新加载的 build.boot

最后,可以结合 Boot 的功能来实现围绕自动重新加载代码的开发工作流程。

In C:\dev\my_project\build.boot:

(set-env! :resource-paths #{"src"})

(require '[boot.core :as core]
         '[boot.pod  :as pod])

(deftask load-ns
  "Loads the my-project.utils namespace in a fresh pod."
  []
  (let [pods (pod/pod-pool (core/get-env))]
    (core/with-pre-wrap [fileset]
      (pod/with-eval-in (pods :refresh)
        ;; We require indirectly here so that errors from my-project.utils have
        ;; proper line and column information.
        (require 'my-project.load-impl))
      fileset)))

(deftask dev
  "Watches source code and loads my-project/utils every time code changes."
  []
  (comp (watch)
        (load-ns)))

In C:\dev\my_project\src\my_project\load_impl.clj:

(ns my-project.load-impl)

(require 'my-project.utils)

In C:\dev\my_project\src\my_project\utils.clj:

(ns my-project.utils
  (:require
    [clojure.string :as s]))

(defn my-range [start end]
  (take (- end start) (iterate inc start)))

(println "In the code!")
(println "(my-range 0 10) = " (my-range 10 20))

返回命令提示符,键入boot dev。你应该看到一些println输出,每次编辑和保存文件时,您都应该再次看到它,反映您所做的任何更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Clojure:在特定命名空间中启动 repl 的相关文章

随机推荐

  • Java 从基本构造函数调用基本方法

    如何从 Super Super 调用 Super printThree 在下面的示例中 我改为调用 Test printThree class Super Super printThree I want Super printThree h
  • 在 Swift 4 中,扩展声明还不能被覆盖

    我最近将我的代码迁移到Swift 4 我面临一个问题扩展 i e 扩展的声明还不能被覆盖 我已经阅读了多篇重新评估此问题的帖子 但他们都不接受下面描述的场景 class BaseCell UITableViewCell Some code
  • 在 Perl 中如何计算给定正态分布的点的概率?

    Perl 中是否有一个包可以让您计算每个给定点的概率分布高度 例如 这可以在 R 中以这种方式完成 gt dnorm 0 mean 4 sd 10 gt 0 03682701 即x 0点服从正态分布 mean 4 sd 10的概率为0 03
  • Twitter Bootstrap:Affix 在单页应用程序中未触发

    我正在做一个单页应用程序并使用 Twitter Bootstrap 我尝试像这样使用 Affix div 当我刷新页面时 一切正常 引导程序词缀添加了一个类 如下所示 div class affix top 当我超过 100px 后 它会将
  • 使用欧几里德算法计算数组值的最小公倍数

    我想使用欧几里德算法计算值数组的最小公倍数 我正在使用这个伪代码实现 发现于维基百科 https en wikipedia org wiki Euclidean algorithm function gcd a b while b 0 t
  • FTP 二进制 x ASCII 自动选择

    我编写了一个 FTP 插件 使用 python 的 ftplib 我想知道确定给定文件是否应该使用二进制或 ASCII 传输方法的最佳方法是什么 换句话说 自动 传输模式 当我收到有关双线的问题报告时 我开始研究这个问题 并且谷歌搜索发现二
  • 让回调在 JavaScript 中同步工作

    我正在使用一个名为DSBridge https github com wendux DSBridge IOS将移动应用程序 在本例中为 iOS 代码 连接到包含我的应用程序主要逻辑的 javascript 代码 这涉及在不可见的 WKWeb
  • Apache 服务器(xampp)在使用 openssl 函数时崩溃

    我正在尝试使用 php ini 生成私钥 公钥对 服务器 Apache 2 4 3 Win32 OpenSSL 1 0 1c PHP 5 4 7 操作系统是 Windows XP SP3 安装了所有 Windows 更新 我正在尝试执行以下
  • 如何使用 C# 访问 SQLite?

    我正在尝试使用 C ASP NET 以编程方式连接到我的 Sqlite 数据库 string requete sql SELECT FROM USERS connStr Data Source C LocalFolder FooBar db
  • 马根托。将块插入另一个块而不更改模板代码

    我尝试寻找解决方案但没有结果 我的任务是编写模块 它应该将一些 html 插入现有块中 我注意到 当我使用布局 xml 文件时 我可以将我的块插入到一些参考中 例如
  • 无法让简单的 ParseKit 示例正常工作

    我刚刚发现 ParseKit 但似乎无法让它在一个简单的例子中工作 NSString test FOO BAR NSString grammar get grammar txt file and read it into a string
  • AngularJS - 外部模板

    我正在为 和 的每个内容制作一个模板 因为我有很多数据要显示 但都在相同的结构中 这里是index html div 这是 script js function Ctrl scope scope methods name method1 d
  • Windows 11 权限被拒绝(公钥)

    最近升级到 Windows 11 后 我无法通过 SSH 访问服务器 我不断收到permission denied publickey error 我尝试过重新生成新的公钥ed25519而不是已弃用的rsa我仍然遇到同样的错误 我已经看到了
  • 2D 弹跳公式无法正常工作

    我是 Unity 的新手 我正在尝试创建一个弹跳球 所以我做了很多关于弹跳相关物理的研究 我找到了一个公式 Formula 2 V dot N N V 其中 V 是速度矢量 N 是球弹跳表面的法线 这是我的脚本 using UnityEng
  • 主干表视图消耗行视图 - 如何构造?

    我有一组模型希望在表格视图中呈现 每个模型应由表中的一行表示 并且该行应使用模板生成 我应该能够将事件处理程序附加到该行 例如单击 在事件发生时发出有关与该行关联的模型的一些特定信息 我见过类似的事情的一种常见方法是将每一行分解到它自己的视
  • Java keytool / 使用 java 生成密钥的安全性(一般)

    我们使用与 java 安装捆绑在一起的 keytool 来生成密钥以进行非对称 RSA 加密 鉴于近期events https www schneier com blog archives 2013 09 the nsa is brea h
  • 如何为 Windows Phone 7 应用程序的 UI 编写自动化测试?

    驱动一个普通的应用程序 它的 UI 已经足够困难了 但是当应用程序没有在您的开发平台上运行时 这就更难了 那么哪些工具可以帮助我测试 Windows Phone 7 应用程序的 UI 也可以看看 对于 Windows 7 Phone 代码的
  • IntelliJ IDEA:为什么 readLine() 需要两个用户输入,而不是使用 Kotlin 的一个?

    我编写了一个简单的程序 它从控制台获取用户的输入 然后将其打印出来 但是当用户输入时 它会请求第二个用户输入 并且只读取第二个输入 Code fun main args Array
  • 如何在 Mathematica 8 中并行集成

    有人知道如何使用所有核心来计算积分吗 我需要使用并行化或并行表 但如何使用 f r Sum 1 n 2 r 2 n 7 2 n n r 2 n 1 x r 2 n 1 n 0 r 2 Nw Transpose Table f j i 1 j
  • Clojure:在特定命名空间中启动 repl

    我安装了 boot clj 并且希望能够在外部编辑器中编辑 clj 文件 并单独运行一个命令行 REPL 我可以从中调用我在 clj 文件中更改的函数 不需要特殊的重新加载命令 另一件事是我不想手动键入命令来包含命名空间 我只想运行一个将我