Clojure 宏

2018-12-27 19:02 更新

在任何語言中,宏都用于生成內(nèi)聯(lián)代碼。 Clojure也不例外,為開發(fā)人員提供了簡(jiǎn)單的宏設(shè)施。 宏用于編寫代碼生成例程,它為開發(fā)人員提供了一種強(qiáng)大的方法來根據(jù)開發(fā)人員的需要定制語言。

以下是一些可用于宏的方法。

defmacro

此函數(shù)用于定義宏。 宏將具有宏名稱,參數(shù)列表和宏的主體。

語法

以下是defmacro基本使用語法:

(defmacro name [params*] body)

參數(shù) - 'name'是宏的名稱。 'params'是分配給宏的參數(shù)。 “body”是宏的主體。

返回值 -無。

下面的程序顯示了如何使用它的示例。

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (defmacro Simple []
      (println "Hello"))
   (macroexpand '(Simple)))
(Example)

輸出

以上示例輸出以下結(jié)果:

Hello

從上面的程序,你可以看到宏“簡(jiǎn)單”擴(kuò)展到“println”“你好”。 宏類似于函數(shù),唯一的區(qū)別是在宏的情況下,對(duì)表單的參數(shù)進(jìn)行求值。

擴(kuò)展宏

這用于擴(kuò)展宏并將代碼放入程序中。

語法

以下是擴(kuò)展宏的基本使用語法:

(macroexpand macroname)

參數(shù) - 'macroname'是需要擴(kuò)展的宏的名稱。

返回值 -擴(kuò)展的宏。

下面是擴(kuò)展宏的使用示例。

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (defmacro Simple []
      (println "Hello"))
   (macroexpand '(Simple)))
(Example)

輸出

以上示例輸出以下結(jié)果:

Hello

宏與參數(shù)

宏也可以用于接受參數(shù)。 宏可以接受任意數(shù)量的參數(shù)。 下面的示例展示如何使用參數(shù)。

(ns clojure.examples.example
   (:gen-class))
(defn Example []
   (defmacro Simple [arg]
      (list 2 arg))
   (println (macroexpand '(Simple 2))))
(Example)

上面的示例在Simple宏中放置一個(gè)參數(shù),然后使用參數(shù)將參數(shù)值添加到列表中。

輸出

以上示例輸出以下結(jié)果:

(2 2)

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)