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

当脚本仍在REPL中运行时,Clojure打印

出来的是脚本的返回值。

Clojure是一种基于JVM的动态函数式编程语言,它具有强大的并发性能和可扩展性。REPL(Read-Eval-Print Loop)是Clojure的交互式开发环境,它允许开发者逐行输入代码并立即执行。

在REPL中,当我们输入一个Clojure脚本并按下回车键时,REPL会对脚本进行解析、求值并打印出结果。脚本的返回值可以是任何Clojure数据类型,例如数字、字符串、列表、映射等。

例如,如果我们在REPL中输入以下脚本:

代码语言:txt
复制
(+ 2 3)

REPL会计算表达式(+ 2 3)的值,并打印出结果5

Clojure的打印功能非常灵活,它可以打印出复杂的数据结构,并且可以通过格式化选项进行定制。例如,我们可以使用pr函数来打印一个列表,并指定打印格式:

代码语言:txt
复制
(pr {:name "John" :age 30} {:pretty true})

这将打印出一个格式化的映射:

代码语言:txt
复制
{:name "John", :age 30}

在Clojure中,我们可以利用REPL的实时性质来快速测试和调试代码。通过观察脚本的返回值,我们可以验证代码的正确性,并及时发现潜在的问题。

对于Clojure开发者来说,熟悉REPL的使用是非常重要的,它可以提高开发效率并加速代码迭代过程。

腾讯云提供了云计算服务,其中包括云服务器、云数据库、云存储等产品。具体推荐的腾讯云产品和产品介绍链接地址可以根据实际需求和场景进行选择。

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

相关·内容

  • (cljsrun-at (JSVM. :browser) 命名空间就这么简单)

    (println "i-am-macro1")) (defmacro i-am-macro2 [] '(println "i-am-macro2"))  由于macro是在编译期展开为列表,然后在运行时解析列表...,而JS作为脚本语言根本就没有所有编译期,因此需要将macro写在独立的clj文件,然后在cljs编译为js时展开。...所以当我们在同一个命名空间定义普通成员和macro时,只需命名两个名称一样扩展名不同的cljs和clj即可。...])) require用在REPL中就好了  在REPL我们会使用如require、use、require-macros、import等macro来引入命名空间。...请紧记,这些确实仅仅用于REPL而已。而且当我们修改源码后,需要通过(require 命名空间 :reload)来重置并重新加载这个命名空间,不带:reload的话新修改的功能将不会生效哦!

    81950

    Clojure 开发那些事

    Emacs + Cider 的组合相比 Intellj + Cursive 最大的优势就是对宏的支持,Cider 提供了对宏展开的快捷键,但在 Cursive 我没找到,不过宏也是比较高级的功能,初学者应用用不到...就拿打印日志来说,Github 上搜一下,应该能够找到最 idiomatic 应该是 timbre,通读其 README 后,怎么配置还不是很清楚,继续 Google,找到 log-config Custom...nrepl ClojureREPL 可以连接到远程服务器上的进程,直接对进程的函数或变量进行修改,这是非常便利的,对于很多运行时的错误可以采用这种方式解决,Emacs 与 Intellj 里面都提供了连接远程...REPL server 的方式。...Emacs 里面是:M-x cider-connect lein 里面是:lein repl :connect 192.168.50.101:4343 总结 国内关于介绍 Clojure 开发的比较少,

    1.6K20

    一名Clojurian的Emacs配置

    有了这个充足的理由,我开始收集emacs的cheatsheet并打印出来,天天放在手边翻阅,甚至买了一本英文版的Learning GNU Emacs书籍,只要有机会就打开emacs开始刷4clojure...另外,为了更好地在emacs编写Clojure,还需要cider-mode和clojure-mode的支持,这时候就不得不编辑init.el文件,本着KISS (keep it simple, stupid...首先,我们需要用到emacs的包管理工具package.el,因为emacs 24及其以上的版本都已经内置,所以无需下载到本地,直接通过require加载到emacs的运行时。...'subword-mode) (add-hook 'cider-repl-mode-hook 'paredit-mode) (add-hook 'cider-repl-mode-hook...最后,需要在init.el文件添加入这么一句(require 'init-clojure-cider),重新启动emacs,找到一个Clojure项目,按下C-c M-j (hack-jack-in)

    2.8K20

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

    ASM 生成可运行在 JVM 的 bytecode。...动态运行时 明确了 Clojure 类生成规则后,下面介绍 Clojure 是如何实现动态运行时。这一问题将分为 AOT 编译与 DynamicClassLoader 类的实现两部分。...仅仅有上面介绍的重定向机制是无法实现动态运行时的,还需要一个灵活的 ClassLoader,可以在 REPL 做如下实验: user> (defn foo [] 1) #'user/foo user>...正如上一篇文章的介绍,这三个方法正是 Compiler 的入口函数,这也就解释了上面 REPL 的实验: 每次重定义一个函数,都会生成一个新 DynamicClassLoader 实例去加载其实现。...慢启动 明白了 Clojure 是如何实现动态运行时,下面分析 Clojure 程序为什么启动慢。

    72920

    Clojure文件操作和惰性序列

    这里使用了(doall )方法,如果不用这个方法,在repl求值的时候会表达式导致抛出Unhandled java.io.IOException Stream closed异常。...最后,写入到wtr。 ---- 注意:程序的str/split是通过(:require [clojure.string :as str])方式引入str命名空间的。...repl尝试pretty-print惰性序列的结果时,才会进行变现操作。 有了上面的知识点,我们来考察with-open和(take 2 (line-seq ))的关系。...那么try...finally运行结束之后,pretty-print变现惰性序列时,发现第一行根本不需要从rdr读,当然就不会抛出异常了。...换个角度,我们知道之所以抛出异常,是因为repl对返回的惰性序列求值了。那么如果我们不在repl求值,程序还会抛出异常吗?

    3.1K30

    使用 ClojureScript 开发浏览器插件的过程与收获

    对于 background page/option page/popup page 这三处都可采用这种措施,但是 content script 没法指定 js 脚本加载顺序,可以想到的一种方式是: "content_scripts...在 dev 过程,推荐设置 cljsbuild 的 optimizations 为 none,以便得到最快的编译速度; 在 release 过程,可以将其设置为 advanced,来压缩、优化 js...由于宏编译与 cljs 编程在不同的时期,所以如果宏写错了,就需要把 repl 杀掉重启来把新的宏 feed 给 cljs,这点也比较痛苦,因为 repl 的启动速度实在是有些慢。...这一点在 Clojure 里面虽然也存在,但是 Clojure 里面一般 repl 开了就不关了,直到电脑重启。...默认会使用 rhino 作为 repl 求值环境,这个在开发浏览器插件时功能很有限,但是对于查看函数定义还是可以的。

    78430

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

    由于宿主环境的不同,因此只能与宿主环境无关的Clojure代码可以在JVM和JSVM间共享,并且cljs也未能完全实现clj的所有语言特性,更何况由于JSVM是单线程因此根本就不需要cljSTM等特性呢...; 输出已加载的命名空间下的函数的源码 ; 注意:name必须是classpath下.cljs文件定义的symbol (cljs.repl/source name) ; 示例 (cljs.repl/...查看命名空间下的公开的Var (cljs.repl/dir ns) ; 示例 (cljs.repl/dir cljs.repl) ; 打印最近或指定的异常对象调用栈信息,最近的异常对象会保存在*e(...一个dynamic var) (pst) (pst e) 注意:当我们使用REPL时,会自动引入(require '[cljs.repl :refer [doc find-doc source apropos...; 但注意第一种采用的是字面量指定属性名,解析时确定 ; 第二种采用表达式来指定属性名,运行时确定 ; 两种方式均可访问嵌套属性 (.

    2.9K70

    MySQL MHA部署 Part 5 MHA部署指南

    复制格式 11.12.14.29 主库 repl Row-Based 11.12.14.30 从库(半同步/备master) repl Row-Based 11.12.14.39 从库(异步) repl...candidate_master=1 [server3] hostname=shytest3 no_master=1 接下来我们来解释每个参数的意义 manager_workdir 管理节点工作目录,mha运行时会有状态文件生成...测试通过会有成功字样打印出来 2.2 测试复制是否正常 管理节点 root>masterha_check_repl --conf=/etc/mha/mha.conf 测试通过会有成功字样打印出来 通过输出我们可以看到相关架构信息...masterha_manager --conf=/etc/mha/mha.conf --remove_dead_master_conf & --remove_dead_master_conf意思为发生切换后...设置relay log清理计划 前面我们说到我们已经取消了relay log的自动清理,这里需要在主从库3台上设置定时任务手动清理 这里首先需要在root用户环境变量增加mysql相关路径 主从库三台

    74611

    Clojure 学习入门(11)—— 宏 macro

    clojure macro宏在运行之前机械展开,定义宏相当于给语言增加新特性,写宏的*原则*:  能写成函数就不要用宏(因为写宏没有写函数简单直观,容易写错,需要先在 REPL 测试一番) ...10 (+ 5 2)) (println (macroexpand-1 '(op 5 + 2 * 10))) ;; (* 10 (+ 5 2)) (println (clojure.walk...;; 2 (println (macroexpand-1 '(op2 5 + 2 * 10))) ;; 2 (println (clojure.walk...2 * 10) (println (macroexpand-1 '(op3 5 + 2 * 10))) ;; (op3 5 + 2 * 10) (println (clojure.walk...后面传递的是参数,使用 ~' 修饰直接翻译过去,即字符串传字符串,:dict 键值也传键值 with-dict 传递多个参数给body,其中 dbname tbname 在 with-dict 中被重新赋值,因此打印出的结果也为赋值后的最新结果

    1K20

    一文道尽JavaScript 20年的发展史

    它没有编译器,没有调试器(至少不是很好的调试器), 没有办法“运行JavaScript程序”,除了在浏览器编写脚本,并查看它们是否运行。JavaScript的开发工具仍然是原始的或不存在的。...Chrome发布仅一年后,在2009年,我们看到了NodeJS的第一个版本,它采用V8 JavaScript引擎并将其嵌入到服务器端环境,可用于在REPL上试验JavaScript,以便编写 脚本,甚至可以依赖高性能事件循环特性来实现...代替“调试器”,我们在我们最喜欢的浏览器内置了devtools,例如Chrome或Firefox。这包括丰富的调试器,REPL /控制台和可视化检查工具。...这意味着未经修改的热点JavaScript代码可以由Node运行时和Chrome等浏览器自动优化为本机代码。...而且由于webpack本身可以通过npm安装,这使得整个开发堆栈保持自包含的方式与Clojure的lein或Python的python / pip不同。

    86230

    Go每日一库之152:gomacro(终端运行go代码)

    [gomacro](https://github.com/cosmos72/gomacro) 是一个近乎完整的 Go 解释器,用纯 Go 实现,它同时提供交互式 REPL脚本模式,并且在运行时不需要...REPL 是 Read-Eval-Print Loop 的缩写,是一种简单的,交互式的编程环境,其中 REPL 分别指: Read:获得用户输入 Eval:对输入求值 Print:打印、输出求值的结果...工具,它可以被用来: 一个独立的可执行文件,具有交互式 Go REPL、行编辑和代码补全功能:只需在命令行运行 gomacro,然后输入 Go 代码即可。...只需几行代码即可将 Eval() 和脚本功能添加到你的 Go 程序: package main import ( "fmt" "reflect" "github.com...输入方式有以下三种: 在解释代码运行时按 CTRL+C 在提示符下输入 : debug STATEMENT-OR-FUNCTION-CALL 在代码添加语句(表达式不够)"break" 或 _ ="break

    49940

    走进 racket(lisp) 的世界

    上周追着看了个大牛的好几篇文章,发现一个叫racket的语言出镜率颇高 —— 这已经是我十月来第三次从各种大牛的文章接触这个词。...就如「惊天魔盗团」里那个被催眠的法国人,生活多次出现和赌博相关的场景,Las Vegas自然而然成为他的下一个旅游目的地。而racket,在上个周末,便成了我的Las Vegas。...如ruby,io,scala,clojure,object c,lua,haskell。 ✓ 爱不释手:学习了全部语法,看作者编写的书,遇到项目时会想想能不能用xxx实现,怎么实现。...racket自带了一个有REPL功能的简单的IDE DrRacket,方便初学者领略语言的魅力。...如今,一门语言如果没有REPL,学习的曲线会高很多。racket在支持REPL的基础上,还提供了一个可以调试的IDE。

    2.5K30

    Redis Lua脚本中学教程(上)

    脚本的原子性 Redis运行所有的Lua命令都使用相同的Lua解释器。一个脚本正在执行时,其他的脚本或Redis命令都不能执行。这很像Redis的事务multi/exec。...这意味着我们要尽量避免脚本的执行时间过长。 脚本整体复制 脚本进行传播或者写入AOF文件时,Redis通常会将脚本本身进行传播或写入AOF,而不是使用它产生的若干命令。...复制命令队列 在这种模式下,Redis在执行脚本时会收集所有影响数据集的命令,脚本执行完毕时,命令队列会被放在事务,发送给AOF文件。...在脚本打印Redis日志 使用redis.log(loglevel,message)函数可以在Lua脚本打印Redis日志。...脚本执行时间超过最大执行时间时,并不会被自动终止,因为这违反了脚本的原子性原则。

    84820
    领券