Clojure-매크로

어떤 언어로든 Macros인라인 코드를 생성하는 데 사용됩니다. Clojure도 예외는 아니며 개발자에게 간단한 매크로 기능을 제공합니다. 매크로는 코드 생성 루틴을 작성하는 데 사용되며 개발자에게 개발자의 요구에 맞게 언어를 조정할 수있는 강력한 방법을 제공합니다.

다음은 매크로에 사용할 수있는 방법입니다.

데프 매크로

이 함수는 매크로를 정의하는 데 사용됩니다. 매크로에는 매크로 이름, 매개 변수 목록 및 매크로 본문이 있습니다.

통사론

다음은 구문입니다.

(defmacro name [params*] body)

Parameters− 'name'은 매크로의 이름입니다. 'params'는 매크로에 할당 된 매개 변수입니다. 'body'는 매크로의 본문입니다.

Return Value − 없음.

이것이 어떻게 사용되는지에 대한 예가 다음 프로그램에 나와 있습니다.

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

산출

위의 프로그램은 다음과 같은 출력을 생성합니다.

Hello

위 프로그램에서 'Simple'매크로가 'println' 'Hello'로 인라인으로 확장 된 것을 볼 수 있습니다. 매크로는 함수와 유사하지만 매크로의 경우 양식에 대한 인수가 평가된다는 점만 다릅니다.

매크로 확장

이것은 매크로를 확장하고 프로그램에서 코드를 인라인으로 배치하는 데 사용됩니다.

통사론

다음은 구문입니다.

(macroexpand macroname)

Parameters − 'macroname'은 확장해야하는 매크로의 이름입니다.

Return Value − 확장 된 매크로.

이것이 어떻게 사용되는지에 대한 예가 다음 프로그램에 나와 있습니다.

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

산출

위의 프로그램은 다음과 같은 출력을 생성합니다.

Hello

인수가있는 매크로

매크로를 사용하여 인수를받을 수도 있습니다. 매크로는 여러 인수를 사용할 수 있습니다. 다음 예제는 인수를 사용하는 방법을 보여줍니다.

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

위의 예제는 Simple 매크로에 인수를 배치 한 다음 인수를 사용하여 목록에 인수 값을 추가합니다.

산출

위의 프로그램은 다음과 같은 출력을 생성합니다.

(2 2)