首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Clojure REPL中动态加载依赖项

在Clojure REPL中动态加载依赖项是指在运行Clojure的交互式环境中,可以在不重启REPL的情况下,加载新的库或者依赖项。这对于开发和调试Clojure应用程序非常有用,因为可以快速地尝试不同的库和代码片段,而无需重新启动REPL。

要在Clojure REPL中动态加载依赖项,可以使用require函数。require函数接受一个或多个库名称作为参数,并将这些库加载到当前的命名空间中。例如,要加载clojure.string库,可以在REPL中输入以下命令:

代码语言:txt
复制
(require 'clojure.string)

如果要加载其他库,可以将库名称作为参数传递给require函数。例如,要加载clojure.data.csv库,可以输入以下命令:

代码语言:txt
复制
(require 'clojure.data.csv)

在加载依赖项之后,可以使用这些库中的函数。例如,要使用clojure.string/split函数,可以在REPL中输入以下命令:

代码语言:txt
复制
(clojure.string/split "hello world" #"\s+")

此外,还可以使用use函数来加载库,并将库中的函数添加到当前命名空间中。例如,要加载clojure.string库并将其函数添加到当前命名空间中,可以输入以下命令:

代码语言:txt
复制
(use 'clojure.string)

然后,可以直接使用库中的函数,而无需使用库名称作为前缀。例如:

代码语言:txt
复制
(split "hello world" #"\s+")

需要注意的是,动态加载依赖项并不会将这些依赖项添加到项目的classpath中,因此在生产环境中运行时,可能需要手动添加这些依赖项。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android 通过 Hilt 进行依赖注入

DI (依赖注入) 是一种程序设计中被广泛使用的技术,非常适合 Android 开发,该技术可以将依赖提供给类,从而让类不必自己创建这些依赖。...您是否尝试过应用中进行手动依赖注入?即使使用了当今许多现有的依赖注入库,随着您的项目越来越大,这些库仍需要大量模板代码,因为您必须手动构造每个类及其依赖,并创建容器用来复用和管理依赖。...正因如此, Google Play 商店前 10k 的顶级应用,其中 74% 都广泛使用了 Dagger。但是,由于在编译期生成代码,构建时间会有所增加。...由于许多 Android Framework 的类都是由操作系统自身实例化的,因此 Android 应用中使用 Dagger 时,会存在与此相关的模板代码。...Codelab 我们发布了如下两个 Codelab,手把手教您使用 Hilt: Android 应用中使用 Hilt 将 Dagger 应用迁移到 Hilt 示例代码 您是否想在现存应用查看如何使用

1.8K20
  • Clojure 运行原理之字节码生成篇

    本文将主要讨论 Clojure 编译成的 bytecode 如何实现动态运行时以及为什么 Clojure 程序启动慢,这会涉及到 JVM 的类加载机制。...但仔细想想会有如下问题: REPL 里面,可以动态添加、修改函数,如果一个命名空间相当于一个类,那么这个类会被反复加载 由于函数和字符串一样是一等成员,这意味这函数既可以作为参数、也可以作为返回值,...仅仅有上面介绍的重定向机制是无法实现动态运行时的,还需要一个灵活的 ClassLoader,可以 REPL 做如下实验: user> (defn foo [] 1) #'user/foo user>...正如上一篇文章的介绍,这三个方法正是 Compiler 的入口函数,这也就解释了上面 REPL 的实验: 每次重定义一个函数,都会生成一个新 DynamicClassLoader 实例去加载其实现。...把生成的 uberjar 解压打开,可以发现 clojure.core 里面的函数都在,这些函数程序启动时都会被加载。 这就是 Clojure 启动慢的原因:加载大量用不到的类。

    72920

    一名Clojurian的Emacs配置

    转向emacs之前,是一名忠实的vim党,从大学开始就不断折腾vim的配置,还花过一段时间专门学习了vimscript,曾经惊叹于vimscript的动态函数式风格的优美和强大。...另外,为了更好地emacs编写Clojure,还需要cider-mode和clojure-mode的支持,这时候就不得不编辑init.el文件,本着KISS (keep it simple, stupid...)原则,我照着各种插件的说明文档,把配置复制粘贴到init.el文件当中,运行起来没有问题就好。...简单点说,就是防止package-initialize之后重复加载包,因为可能会影响性能。 模块化 如果把什么东西都揉到init.el文件,这个文件一定会很快变得臃肿不堪。...的配置都统一放到:config管理起来。

    2.8K20

    Clojure component 设计哲学

    内存式缓存:一个共享的可变引用当中获取或者设置数据的函数,比如 Clojure 的 Atom 或 Ref。 Component 和面向对象编程里的对象定义在理念上很类似。...但这并不会动摇 Clojure 这门编程语言中纯函数和不可变数据结构的地位。大部分函数依然是函数,大多数数据也还是数据。而 Component 尝试函数式编程范式辅助管理有状态的资源。...开发环境的入口 开发过程,一般引用一个 system map 然后 REPL 测试它是很有用的。...如果一个 component 省略了 Lifecycle 的协议,它还是能参与到依赖注入的过程。 无需 lifecycle 的 component 可以是一个普通的 Clojure map。...update-system-reverse函数按反向依赖顺序排列:每个 component 将在其依赖之前调用。

    1K00

    给我5分钟,保证教会你vue3动态加载远程组件

    前言 一些特殊的场景(比如低代码、类似于APP的热更新),我们需要从服务端动态加载.vue文件,然后将动态加载的远程vue组件渲染到我们的项目中。...今天这篇文章我将带你学会,vue3如何去动态加载远程组件。 defineAsyncComponent异步组件 想必聪明的你第一时间就想到了defineAsyncComponent方法。...上面的代码看着已经完美实现动态加载远程组件了,结果不出意外在浏览器运行时报错了。...我们来看看执行效果,如下图: 从上面的gif图中可以看到,当我们点击“加载远程组件”按钮后,network才去加载了远程组件remote-component.vue。...如下图: 总结 这篇文章讲了vue3如何从服务端加载远程组件,首先我们需要使用defineAsyncComponent方法定义一个异步组件,这个异步组件是可以直接在template像普通组件一样使用

    43211

    GOT段linux系统实现代码动态加载的作用和其他段的说明

    因此必须有机制让程序在运行过程调用系统API的时候有办法去确定所调用的系统函数对应的入口地址,这就是代码运行时对应动态加载的过程。...动态加载,也就是调用系统函数时再去确认所调用的函数地址的技术需要使用两个段,一个是.plt段,一个是.got.plt段。...后者其实是.got段的一种特定形式,.got段程序的加载和执行过程还有其他形式和作用,在后续章节我们再研究。 上一节我们以调研系统函数puts为例描述了动态加载的基本过程。...TYPE一栏为NEED的表明,对应共享库需要在代码运行时加载到系统内存。...,.init_aray包含了一系列初始化函数入口地址所构成的数组,main函数执行时,数组的函数会被提前调用进行初始化,我们可以使用命令objdump -d —section .init_array.out

    2.3K20

    Clojure文件操作和惰性序列

    读取和写入文件 数据一般都是存储纯文本文件当中,存储的形式多种多样。本文,我会介绍如何在Clojure读取和写入这些数据。 1....这里使用了(doall )方法,如果不用这个方法,repl求值的时候会表达式导致抛出Unhandled java.io.IOException Stream closed异常。...5.2 无结束标识 5.1的记录通过END标识分隔,但是事实上这是一个多余的字段,记录可以更简练,如下: 清单 5.2 multimol-without-end-marker.pdb COMPND...惰性序列repl什么时候变现(realizes)? 惰性序列是用(lazy-seq [& body] )宏创建出来的。lazy-seq仅在需要的时候才会去调用它的body。...换个角度,我们知道之所以抛出异常,是因为repl对返回的惰性序列求值了。那么如果我们不在repl求值,程序还会抛出异常吗?

    3.1K30

    我是怎样学习新编程语言的

    这里的“终”就是目标,软件工程,有一种实践很好得反映了这种做事方式——测试驱动开发。...Elixir中有iex命令作为repl,而且这门语言深受Clojure的影响,尤其是文档和例子方面很充足,对于初学者再友好不过。...Clojure中有keyword,如{:name "clojure"},而Python并没有这样的数据类型,我只好使用{'name': "python"},那么Elixir呢?...我们知道,动态类型语言中,arity指的是方法参数的个数,这里的1和2其实表明的就是join有两个重载的方法,分别接受一个参数和两个参数。更进一步,arity是方法(函数)实现静态多态的依据之一。...组织代码 上面的验证只需要repl就足够了。但是,真正编写还是得有组织和结构。软件工程,控制复杂度(复杂度从来不会被消除)的基本法则就是模块化。

    93530

    (cljsrun-at (->JSVM :browser) 语言基础)

    由于宿主环境的不同,因此只能与宿主环境无关的Clojure代码可以JVM和JSVM间共享,并且cljs也未能完全实现clj的所有语言特性,更何况由于JSVM是单线程因此根本就不需要cljSTM等特性呢...; cljs.user/say ;; ([a1 a2 & more]) ;; 输出一堆参数:D ;;=> nil ; 根据字符串类型的关键字,加载的命名空间中模糊搜索名称或docstrings匹配的绑定或函数的...; 输出已加载的命名空间下的函数的源码 ; 注意:name必须是classpath下.cljs文件定义的symbol (cljs.repl/source name) ; 示例 (cljs.repl/..." ;; [a1 a2 & more] ;; (println a1) ;; (println a2) ;; (doseq [a more] ;; (print a))) ; 加载的...ns通过字符串或正则模糊查找symbols (cljs.repl/apropos str-or-regex) ; 示例 (cljs.repl/apropos "sa") (cljs.repl/apropos

    2.9K70
    领券