【问题标题】:How to use macro inside a function?如何在函数中使用宏?
【发布时间】:2014-10-28 02:20:17
【问题描述】:

我为clojure创建了一个for循环宏(基于this answer),如下:

(defmacro for-loop [[sym init check change :as params] & steps]
 `(loop [~sym ~init value# nil]
    (if ~check
      (let [new-value# (do ~@steps)]
        (recur ~change new-value#))
      value#)))

现在,我想在某个函数中使用这个 for 循环,但我不知道如何在函数中使用它。有人可以指导我吗,或者给我一个在函数中简单使用 this 的例子?

【问题讨论】:

  • 如果你不知道如何使用这个宏,你是怎么写的?在函数中使用它与在其他任何地方使用它大致相同。您是否有任何具体问题,或者您尝试过的方法无效?

标签: macros clojure


【解决方案1】:

如果你把defmacro改成defn变成一个函数,那么比如

(for-loop '[i 0 (< i 10) (inc i)] '(* 2 i))

... 产生(剥离命名空间限定符)

(loop [i 0 value__11639__auto__ nil]
  (if (< i 10)
    (let [new-value__11640__auto__ (do (* 2 i))]
      (recur (inc i) new-value__11640__auto__))
    value__11639__auto__))

研究一下它的作用。

【讨论】:

    猜你喜欢
    • 2019-10-01
    • 1970-01-01
    • 2017-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-23
    相关资源
    最近更新 更多