在 Clojure 中捕获系统/输出

2023-12-20

我正在使用一个将文本输出到控制台的 Java 包,我需要捕获字符串中的文本,但我不知道如何执行此操作。从查看 Clojure 文档看来,我所要做的就是将 java 调用包装在with-out-str但这对我不起作用。

最小代码示例:如果我尝试

(with-out-str 
 (.println (System/out) "foo"))

我希望得到一个值为“foo”的字符串,但它仍然输出到控制台。我究竟做错了什么?


Java's System.out.println(...)是一个电话println的方法PrintStream实例。您需要更换System.out使用您自己的实例进行流式传输并捕获其内容:

(import [java.io ByteArrayOutputStream PrintStream])

(def out-buffer (java.io.ByteArrayOutputStream.))

(System/setOut (java.io.PrintStream. out-buffer true "UTF-8"))

(defn out-str []
  (.toString out-buffer "UTF-8"))

但在 REPL 中要小心,因为它使用System.out打印结果,这样当您全局替换它时,它将破坏您的 REPL 实例。

您甚至可以编写一个宏来捕获System.out然后恢复原来的样子PrintStream实例:

(defmacro with-system-out-str [& body]
  `(let [out-buffer# (ByteArrayOutputStream.)
         original-out# System/out
         tmp-out# (PrintStream. out-buffer# true "UTF-8")]
     (try
       (System/setOut tmp-out#)
       ~@body
       (finally
         (System/setOut original-out#)))
     (.toString out-buffer# "UTF-8")))

(with-system-out-str
  (.println System/out "Hi"))
;; => "Hi\n"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Clojure 中捕获系统/输出 的相关文章

  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • Java 枚举与创建位掩码和检查权限的混淆

    我想将此 c 权限模块移植到 java 但是当我无法将数值保存在数据库中然后将其转换为枚举表示形式时 我很困惑如何执行此操作 在 C 中 我创建一个如下所示的枚举 public enum ArticlePermission CanRead
  • .properties 中的通配符

    是否存在任何方法 我可以将通配符添加到属性文件中 并且具有所有含义 例如a b c d lalalala 或为所有以结尾的内容设置一个正则表达式a b c anything 普通的 Java 属性文件无法处理这个问题 不 请记住 它实际上是
  • HSQL - 识别打开连接的数量

    我正在使用嵌入式 HSQL 数据库服务器 有什么方法可以识别活动打开连接的数量吗 Yes SELECT COUNT FROM INFORMATION SCHEMA SYSTEM SESSIONS
  • Java 集合的并集或交集

    建立并集或交集的最简单方法是什么Set在 Java 中 我见过这个简单问题的一些奇怪的解决方案 例如手动迭代这两个集合 最简单的单行解决方案是这样的 set1 addAll set2 Union set1 retainAll set2 In
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • defn 和 defmacro 和有什么不一样?

    defn 和 defmacro 和有什么不一样 函数和宏有什么区别 defn定义一个函数 defmacro定义一个宏 函数和宏之间的区别在于 在函数调用时 首先评估函数的参数 然后使用参数评估函数体 另一方面 宏描述了从一段代码到另一段代码
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • 像 Java 这样的静态类型语言中动态方法解析背后的原因是什么

    我对 Java 中引用变量的动态 静态类型和动态方法解析的概念有点困惑 考虑 public class Types Override public boolean equals Object obj System out println i
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • 在我的 Spring Boot 示例中无法打开版本 3 中的 Swagger UI

    我在 Spring Boot 示例中打开 swagger ui 时遇到问题 当我访问 localhost 8080 swagger ui 或 localhost 8080 root api name swagger ui 时出现这种错误 S
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • Clojure 宏总是泄漏吗?

    如果你读过这个问题宏 gt 带有匿名函数 https stackoverflow com questions 10740265 macro with anonymous functions 10740411 comment13981517
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 如何使用mockito模拟构建器

    我有一个建造者 class Builder private String name private String address public Builder setName String name this name name retur
  • 使用 CXF-RS 组件时,为什么我们使用 而不是普通的

    作为后续这个问题 https stackoverflow com questions 20598199 对于如何正确使用CXF RS组件我还是有点困惑 我很困惑为什么我们需要

随机推荐

  • 让 clangd 了解编译器给出的宏

    我有两个从同一源 客户端和服务器 构建的可执行文件 并且它们是使用编译选项构建的 D CLIENT 0 D SERVER 1对于服务器和 D CLIENT 1 D SERVER 0为客户 如果我做类似的事情 if CLIENT Client
  • 如何设置 Paint.setTextSize() 的单位

    是否可以更改单位Paint setTextSize 据我所知 它是像素 但我喜欢在 DIP 中设置文本大小以支持多屏幕 我知道这个主题很旧并且已经得到解答 但我还想建议这段代码 int MY DIP VALUE 5 5dp int pixe
  • 如何在 Android 上实现选项卡之间的滑动?

    Android 4 0 中针对选项卡的关键设计建议之一是允许刷卡 http developer android com design patterns swipe views html between tabs在适当的情况下在它们之间进行
  • 为什么“echo strcmp('60', '100');”在php输出5中?

    PHP 关于这个函数的文档有点稀疏 我读过这个函数比较 ASCII 值 所以 echo strcmp hello hello outputs 0 as expected strings are equal echo hr echo strc
  • MPAndroidChart,如何删除小数百分比并且不显示低于10的百分比?

    我在用MPAndroid图表 https github com PhilJay MPAndroidChart我有两个问题 MPAndroid 饼图 去除小数百分比 饼图上不显示小于 10 的值 但显示切片 只是对于低于 10 的百分比不应显
  • PayPal CreateRecurringPaymentsProfile 账单频率

    我已经设法让我的网站与 paypal billing CreateRecurringPaymentsProfile 一起使用 但是我对以下字段感到困惑 计费周期和计费频率 如果我将第一个设置为每月 第二个设置为 12 希望它每月向我的客户收
  • 在 Area2D 中覆盖 KinematicBody2D 运动?

    I m trying to create a windy area within which the player would be pushed continuously to the left lt 到目前为止 这就是我想出的Windy
  • 将 Oracle 的时间戳转换为纪元中的秒数

    我在 Oracle 数据库的表中存储了一个时间戳 例如 01 03 12 16 13 33 000000000 我想将其转换为自 Unix Epoch 以来的秒数以在查询中返回 最简单的方法是什么 编辑 哦 我需要时间戳精度 不能依赖这里的
  • Swift:创建 UIImage 数组

    使用 Swift 我尝试为简单的动画创建 UIImage 对象数组 上下文帮助animationImages内容为 数组必须包含 UI Image 对象 我尝试按如下方式创建所述数组 但似乎无法获得正确的语法 var logoImages
  • 如何将 CSS 样式应用到元素?

    我是 CSS 新手 不是程序员 我了解什么是类 也了解什么是 div 但我似乎找不到的是如何在特定元素 例如我网站的 div 上设置样式 在你的 HTML 中 div class myClass Look at me div 在你的 CSS
  • 通过蓝牙将 OBDSim 连接到 Windows 上的 Torque

    我正在尝试在 Win7 上安装 OBDSim 但遇到了一些麻烦 我的最终目标是将 OBDSim 作为蓝牙 ELM327 OBDII 模拟器运行 并使用 Android 设备上的 Torque 应用程序连接到它 我在 youtube 上观看了
  • 如何调试从玉石打印对象

    如何调试从玉石打印对象 例如console log 在 JavaScript 中 您可以使用以下命令进行调试console log from jade像这样 div console log the object you want to lo
  • 如何在 Dart 中对末尾为空对象的 List 进行排序

    开始着手 Flutter 进行一个研究项目 我想知道如何对文件列表进行排序 事实上 我的程序有一个包含 4 个文件的列表 初始化如下 List
  • Python VLC - 获取位置轮询率解决方法

    我使用 Python VLC 在 pyqt 中构建自定义播放应用程序 我画了一个漂亮的自定义滑块来跟踪视频 但遇到了一些恼人的问题 无论我多久告诉我的滑块更新一次 它都会出现故障 每 1 4 秒左右跳跃一次 并且看起来不稳定 只是时间线 而
  • SVG textPath 上的希伯来语文本仅在 Safari 中反转

    将希伯来语文本放在 SVG textPath 上时 仅在 Safari 中会反转 macOS ventura 13 2 Safari 16 3 在 Firefox 和 Chrome 中都可以 不在路径上的文本总是可以的 此外 我可以使用 b
  • 防止使用 HTML 锚点播放 MP3 文件

    如何下载 MP3 链接而不是 在浏览器中 播放 我尝试将目标更改为空白 但这只是在新窗口中打开了播放器 您无法通过修改链接来做到这一点 您必须让提供该文件的 HTTP 服务器发送一个Content Type 应用程序 八位字节流 据推测 它
  • 将所有列中的值替换为该列的值

    如何用该列的编号替换所有列中的所有 1 我已经可以逐列执行此操作 输出 输出 3 1 3 3 输出 输出 4 1 4 4 输出 输出 5 1 5 5 etc 但我觉得自己像个傻瓜一样为每一个专栏写下这些内容 应该有一种方法可以同时完成所有这
  • 使用 IN 从 sqlite 数据库中删除

    我正在使用这样的记录 ID 从 sqlite 数据库中删除 这dirID是一个 ID 数组 Dim i As Integer 0 Dim conn As New SQLiteConnection Data Source DBPath Dim
  • Hadoop字数统计:接收以字母“c”开头的单词总数

    这是 Hadoop 字数统计 java map 和 reduce 源代码 在地图函数中 我已经可以输出所有以字母 c 开头的单词以及该单词出现的总次数 但我想做的只是输出总数以字母 c 开头的单词 但我在获取总数方面有点困难 任何帮助将不胜
  • 在 Clojure 中捕获系统/输出

    我正在使用一个将文本输出到控制台的 Java 包 我需要捕获字符串中的文本 但我不知道如何执行此操作 从查看 Clojure 文档看来 我所要做的就是将 java 调用包装在with out str但这对我不起作用 最小代码示例 如果我尝试