宏(Macros)
优质
小牛编辑
135浏览
2023-12-01
在任何语言中, Macros都用于生成内联代码。 Clojure也不例外,为开发人员提供简单的宏设施。 宏用于编写代码生成例程,这为开发人员提供了一种根据开发人员的需求定制语言的强大方法。
以下是可用于宏的方法。
defmacro
此函数用于定义宏。 宏将具有宏名称,参数列表和宏的主体。
语法 (Syntax)
以下是语法。
(defmacro name [params*] body)
Parameters - 'name'是宏的名称。 'params'是分配给宏的参数。 'body'是宏的主体。
Return Value - 无。
例子 (Example)
以下程序显示了如何使用它的示例。
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
输出 (Output)
上述程序产生以下输出。
Hello
从上面的程序中你可以看到宏'Simple'被内联扩展为'println'“Hello”。 宏与函数类似,唯一的区别是在宏的情况下评估表单的参数。
macro-expand
这用于扩展宏并将代码内嵌在程序中。
语法 (Syntax)
以下是语法。
(macroexpand macroname)
Parameters - 'macroname'是需要扩展的宏的名称。
Return Value - 扩展的宏。
例子 (Example)
以下程序显示了如何使用它的示例。
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple []
(println "Hello"))
(macroexpand '(Simple)))
(Example)
输出 (Output)
上述程序产生以下输出。
Hello
带参数的宏
宏也可用于接受参数。 宏可以接受任意数量的参数。 下面的示例展示了如何使用参数。
例子 (Example)
(ns clojure.examples.example
(:gen-class))
(defn Example []
(defmacro Simple [arg]
(list 2 arg))
(println (macroexpand '(Simple 2))))
(Example)
上面的示例在Simple宏中放置一个参数,然后使用该参数将参数值添加到列表中。
输出 (Output)
上述程序产生以下输出。
(2 2)