clojure - 在 EDN 中,如何将多个值传递给从其他标记元素返回的标记元素
问题描述
我有以下 EDN
{
:test #xyz/getXyz #abc/getAbc #fgh/getFgh "sampleString"
}
在 Clojure 中,我为每个内部调用 java 函数的标记元素定义了实现。我有一个要求,我需要将 #abc/getAbc 和 #fgh/getFgh 的返回值作为单独的参数传递给 #xyz/getXyz。在我当前的实现中,#fgh/getFgh 使用“sampleString”调用。随着#fgh/getFgh 的输出,#abc/getAbc 被调用。并通过其输出 #xyz/getXyz 被调用。我的要求是#xyz/getXyz 应该以#abc/getAbc 和#fgh/getFgh 的返回值作为单独的参数来调用。
Clojure 实现
(defn getXyz [sampleString]
(.getXyz xyzBuilder sampleString)
)
(defn getAbc [sampleString]
(.getAbc abcBuilder sampleString)
)
(defn getFgh [sampleString]
(.getFgh fghBuilder sampleString)
)
(defn custom-readers []
{
'xyz/getXyz getXyz
'xyz/getAbc getAbc
'xyz/getFgh getFgh
}
)
我想将 getXyz 修改为
(defn getXyz [abcReturnValue fghReturnValue]
(.getXyz xyzBuilder abcReturnValue fghReturnValue)
)
解决方案
你不能完全按照你的要求去做。标签只能处理以下形式。也就是说,您可以更改 Xyz EDN 的语法,以便它可以支持采用一[Abc Fgh]
对向量。
{:test #xyz/getXyz [#abc/getAbc "sampleString" #fgh/getFgh "sampleString"]}
我不确定您是否意味着 getAbc 仍然需要将 getFgh 作为输入。如果是这样,它会更像:
{:test #xyz/getXyz [#abc/getAbc #fgh/getFgh "sampleString" #fgh/getFgh "sampleString"]}
现在您的 getXyz 标记阅读器将收到 Abc 和 Fgh 的向量。因此,您需要更改代码以从向量内部获取元素,如下所示:
(defn getXyz [[abcReturnValue fghReturnValue]]
(.getXyz xyzBuilder abcReturnValue fghReturnValue))
这使用解构语法(请注意,参数被包裹在一对额外的括号中),但如果您愿意,您可以使用first
andsecond
或任何其他方式。
推荐阅读
- c - 为什么我不能从 Linux 内核停止这个线程?
- python - 使用 python 装饰器时防止重复的异常引发
- amazon-web-services - 是否可以在同一个 AWS EC2 中运行多个 Web 实例?
- c# - 如何使用 C# 将 SQL 数据库中的数据提取到本地双变量中?
- javascript - Javascript按第二个值排序对象
- powerbi - 计算列作为轴和值
- javascript - 如何在 Javascript 中使用 Canvas 将垂直线绘制为音乐曲目进度条
- mysql - 使用 NodeJs 在 MySql 中解析 JSON 数据时出错
- sql - Aurora 无服务器“死区时间”
- php - 如何修改正则表达式以排除某些文本?