在 Clojure 中,如何在不使用特殊点符号的情况下调用对象上的方法?

int*_*tar 2 macros clojure

在 Clojure 中,我总是使用 . 符号即。

(.methCall obj args)
Run Code Online (Sandbox Code Playgroud)

但是有没有办法在没有点符号的情况下调用该方法?例如。当我转身时,相当于“应用”之类的东西

(f x y) 
Run Code Online (Sandbox Code Playgroud)

进入

(apply f x y)
Run Code Online (Sandbox Code Playgroud)

?

我想这样做是为了编写一个宏,该宏可以将方法名称作为参数之一并在对象上调用它。

cfr*_*ick 5

还有就是点特殊形式

例如

user=> (. (bigint 42) toString)
"42"
Run Code Online (Sandbox Code Playgroud)

您正在使用的表单处于成员访问权限下,并且是一个快捷方式:

user=> (macroexpand '(.toString (bigint 42)))
(. (bigint 42) toString)
Run Code Online (Sandbox Code Playgroud)

以上文档说明了以下扩展:

(.instanceMember instance args*) ==> (. instance instanceMember args*)
(.instanceMember Classname args*) ==> (. (identity Classname) instanceMember args*)
(.-instanceField instance) ==> (. instance -instanceField)
(Classname/staticMethod args*) ==> (. Classname staticMethod args*)
Classname/staticField ==> (. Classname staticField)
Run Code Online (Sandbox Code Playgroud)