繁体   English   中英

实用的Clojure:宏和Java互操作

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM