Clojure宏在另一个宏中:如何从符号生成字符串

伴侣瓦尔加

标题可能不是100%正确,但让我向您展示这个问题:

(defmacro nvp!
  [n width height]
  `(q/defsketch (symbol (str (name '~n) "-viewport" ))
                  :title (name '~n))

简而言之:有一个称为的宏defsketch(它是lib的一部分quil,但这没关系)。它的签名基本上是defsketch [applet-name & options],并且创建了一些东西并将其绑定到一个名为的var中applet-name出于某种原因,我想将其包装到另一个宏中,该宏除其他事项外采用一个applet-name参数,将该名称扩展为applet-name-viewport并将其传递给defsketch但是,我无法找出正确的方法(在上面的代码中使用macroexpand((pprint (macroexpand(nvp test-name 500 500)))

(def(clojure.core/symbol (clojure.core/str (clojure.core/name 'my-namespace.core/test-name) "-viewport"))
 (quil.applet/applet
 :title (clojure.core/name 'my-namespace.core/test-name)))

(clojure.core/symbol (clojure.core/str (clojure.core/name 'my-namespace.core/test-name) "-viewport") -这部分看起来不错,但是应该在传递给内部宏之前对其进行某种评估...

凯尔

您需要取消对生成新符号而不是原始符号本身的表单的引用。

这是一个小示例,说明如何使用defn内部宏like宏来完成此操作

(defmacro mydefn
  [name & body]
  `(defn ~name ~@body))

(defmacro defnview
  [n & body]
  `(mydefn ~(symbol (str (name n) "-viewport")) ~@body))

;; OR

(defmacro defnview
  [n & body]
  (let [n (symbol (str (name n) "-viewport"))]
    `(mydefn ~n ~@body)))

例子:

(defnview foo [a] a)
;; => #'user/foo-viewport

(foo-viewport 1)
;; => 1

(macroexpand '(defnview foo [a] a))
;; => (def foo-viewport (clojure.core/fn ([a] a)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在另一个宏的字符串参数中使用Freemarker宏调用

来自分类Dev

如何使用从另一个宏中的宏变量返回的值

来自分类Dev

在guile方案中,如何从另一个宏调用宏时防止重命名?

来自分类Dev

如何使用从另一个宏中的宏变量返回的值

来自分类Dev

如何检查宏的元素是否在另一个宏中

来自分类Dev

VBA 宏,它动态地从字符串中写入一个新的宏

来自分类Dev

当类型在另一个模块内部时,宏中的哪个符号允许类型构造?

来自分类Dev

当类型在另一个模块内部时,宏中的哪个符号允许类型构造?

来自分类Dev

使用#define和#进行字符串化将另一个宏常量转换为字符串

来自分类Dev

如何使用一个板条箱中的另一个宏?

来自分类Dev

(C99)在另一个宏中展开一个宏

来自分类Dev

GCC宏扩展以调用另一个宏

来自分类Dev

在另一个宏内展开X宏

来自分类Dev

如何生成具有与另一个文件中的模式匹配的所有字符串的文件

来自分类Dev

如何在另一个区域再次显示随机生成的字符串(从数组)?

来自分类Dev

如何生成从字符串开始并以另一个字符串结尾的列表?

来自分类Dev

生成字符串“ |” 在跨度中与另一个字符串的宽度相同

来自分类Dev

基于 Python 中另一个字符串的字符串生成

来自分类Dev

如何用另一个替换字符串中的字符?在C ++中

来自分类Dev

如何在调用另一个宏时使用宏参数?

来自分类Dev

如何定义使用另一个宏的C宏?

来自分类Dev

如何使用另一个宏创建 C 宏名称?

来自分类Dev

从C ++中的另一个宏调用多个宏

来自分类Dev

另一个宏中的Q_PROPERTY宏

来自分类Dev

宏中的逗号以将参数传递给另一个宏函数(#define a,b)

来自分类Dev

宏名称从makefile中的另一个宏扩展

来自分类Dev

C 宏在另一个 C 宏中展开

来自分类Dev

如何将目标传递给Excel事件中的另一个宏?

来自分类Dev

Excel宏:检查当前单元格是否具有子字符串作为另一个单元格

Related 相关文章

  1. 1

    在另一个宏的字符串参数中使用Freemarker宏调用

  2. 2

    如何使用从另一个宏中的宏变量返回的值

  3. 3

    在guile方案中,如何从另一个宏调用宏时防止重命名?

  4. 4

    如何使用从另一个宏中的宏变量返回的值

  5. 5

    如何检查宏的元素是否在另一个宏中

  6. 6

    VBA 宏,它动态地从字符串中写入一个新的宏

  7. 7

    当类型在另一个模块内部时,宏中的哪个符号允许类型构造?

  8. 8

    当类型在另一个模块内部时,宏中的哪个符号允许类型构造?

  9. 9

    使用#define和#进行字符串化将另一个宏常量转换为字符串

  10. 10

    如何使用一个板条箱中的另一个宏?

  11. 11

    (C99)在另一个宏中展开一个宏

  12. 12

    GCC宏扩展以调用另一个宏

  13. 13

    在另一个宏内展开X宏

  14. 14

    如何生成具有与另一个文件中的模式匹配的所有字符串的文件

  15. 15

    如何在另一个区域再次显示随机生成的字符串(从数组)?

  16. 16

    如何生成从字符串开始并以另一个字符串结尾的列表?

  17. 17

    生成字符串“ |” 在跨度中与另一个字符串的宽度相同

  18. 18

    基于 Python 中另一个字符串的字符串生成

  19. 19

    如何用另一个替换字符串中的字符?在C ++中

  20. 20

    如何在调用另一个宏时使用宏参数?

  21. 21

    如何定义使用另一个宏的C宏?

  22. 22

    如何使用另一个宏创建 C 宏名称?

  23. 23

    从C ++中的另一个宏调用多个宏

  24. 24

    另一个宏中的Q_PROPERTY宏

  25. 25

    宏中的逗号以将参数传递给另一个宏函数(#define a,b)

  26. 26

    宏名称从makefile中的另一个宏扩展

  27. 27

    C 宏在另一个 C 宏中展开

  28. 28

    如何将目标传递给Excel事件中的另一个宏?

  29. 29

    Excel宏:检查当前单元格是否具有子字符串作为另一个单元格

热门标签

归档