[英]Practical Clojure: macros and Java interop
在实用Clojure的Java互操作一章中,作者注意到以下有关Java互操作“语法糖”的信息(例如(.method object arguments)
而不是(.method object arguments)
(. object method arguments)
):
由于这些“语法糖”扩展与宏扩展在同一编译阶段发生,因此执行复杂代码生成的宏可能需要避免使用它们,并使用新的和。 (点)特殊形式。
我不明白为什么“语法糖”扩展与宏扩展同时发生是一个问题。 是因为扩展顺序可能有问题吗?
与生成互操作调用有关的宏通常应使用已删除修饰符的特殊形式,但这不是因为何时出现删除修饰符,也不是问题。 而且,他们不必:我比我想数的次数还多,我见过有人写:
(defmacro call [obj method & args]
`(~(symbol (str "." (name method))) ~obj ~@args))
与使用适当工具的外观相比,这简直是一团糟:
(defmacro call [obj method & args]
`(. ~obj ~method ~@args))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.