在 EDN 中,如何将多个值传递给从其他标记元素返回的标记元素
In EDN, how can I pass multiple values to tagged element returned from other tagged elements
我关注了 EDN
{
:test #xyz/getXyz #abc/getAbc #fgh/getFgh "sampleString"
}
在 Clojure 中,我为每个内部调用 java 函数的标记元素定义了实现。我有一个要求,我需要将 #abc/getAbc 和 #fgh/getFgh 的 return 值作为单独的参数传递给 #xyz/getXyz 。
在我当前的实现中,#fgh/getFgh 是通过 "sampleString" 调用的。并根据#fgh/getFgh 的输出调用#abc/getAbc。它的输出 #xyz/getXyz 被调用。
我的要求是 #xyz/getXyz 应该使用 #abc/getAbc 和 #fgh/getFgh 的 return 值作为单独的参数进行调用。
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"]}
现在,您标记为 reader 的 getXyz 将收到 Abc 和 Fgh 的向量。所以你需要改变你的代码来从向量中获取元素,像这样:
(defn getXyz [[abcReturnValue fghReturnValue]]
(.getXyz xyzBuilder abcReturnValue fghReturnValue))
这使用了解构语法(注意参数被包裹在一对额外的括号中),但如果您愿意,您可以使用 first
和 second
或任何其他方式。
我关注了 EDN
{
:test #xyz/getXyz #abc/getAbc #fgh/getFgh "sampleString"
}
在 Clojure 中,我为每个内部调用 java 函数的标记元素定义了实现。我有一个要求,我需要将 #abc/getAbc 和 #fgh/getFgh 的 return 值作为单独的参数传递给 #xyz/getXyz 。 在我当前的实现中,#fgh/getFgh 是通过 "sampleString" 调用的。并根据#fgh/getFgh 的输出调用#abc/getAbc。它的输出 #xyz/getXyz 被调用。 我的要求是 #xyz/getXyz 应该使用 #abc/getAbc 和 #fgh/getFgh 的 return 值作为单独的参数进行调用。
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"]}
现在,您标记为 reader 的 getXyz 将收到 Abc 和 Fgh 的向量。所以你需要改变你的代码来从向量中获取元素,像这样:
(defn getXyz [[abcReturnValue fghReturnValue]]
(.getXyz xyzBuilder abcReturnValue fghReturnValue))
这使用了解构语法(注意参数被包裹在一对额外的括号中),但如果您愿意,您可以使用 first
和 second
或任何其他方式。