问题标签 [define-syntax]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
racket - 为什么定义语法 my-class 中只有一种方法?
这不是一个好的模板。但它有助于解释define-syntax
. 我很困惑为什么第 4 行只有 1 种方法。quote <attr>
表达式中的不[(equal? msg (quote <attr>)) <attr>]
也是一种方法吗?它们的结构非常相似。
c++ - 未排序的函数调用:#define 错误
静态代码分析工具显示我有一个未排序的函数调用定义。想要摆脱警告。
它抱怨我在最后一个定义中使用了 Logging() 和 get_id() (两个函数,只允许一个)。
如何修改定义以避免警告?如您所见,我已经尝试将它们分成两个定义。
c++ - 宏定义中的标记未在此范围内声明
我正在尝试使用定义宏来实现我的记录器的逻辑系统,当定义某些切换时,它将扩展为空。问题是,当我堆叠多个这些开关时,一个嵌套在另一个内部(例如调用 IF_SWITCH_1 类似函数的宏),我得到了代码块中列出的多个错误。 是什么导致了这些错误?我该如何修复它们?
据我所知,更改定义的顺序对错误没有影响。
使用 MinGW 8.10 64 位编译
macros - Chez Scheme 的自定义模式匹配工具
我正在尝试在 Scheme 中创建自己的模式匹配系统。首先,我正在为 s 表达式制作一个解析器,将它们分成如下标记:
'(1 2 b (3 4))
=>'(number number symbol (number number))
应该注意的是,我以前没有define-syntax
在 Scheme 中使用过,所以这可能是我搞砸的地方。Chez Scheme 向我抛出了这个错误:
Exception: invalid syntax classify at line 21, char 4 of pmatch.scm
. 请注意,行号不会与此处的代码段完全对应。有谁知道我做错了什么?
macros - 如何使用 Scheme 定义语法宏增加记录字段
给定一个带有许多数字字段的 Chez Scheme 记录,这些字段不断地被小增量和减量(通常是一个)改变,有没有办法编写一个可以通过将字段传递给字段值来改变字段值的宏?我现在完成此操作的方式类似于以下 REPL 成绩单:
最好有一个简单的宏,比如inc!
,它可以对记录中的字段执行变异递增/递减操作。我从类似 Lisp的Scheme 版本开始incf
,decf
这适用于“正常”变量(并且易于实现),但在这种情况下dec!
,它不使用设置可变记录字段的机制。r-x-set!
有没有明显的方法来编写这样的宏?您可以只传递对记录字段的引用而不必为每个字段编写不同的东西吗?
c++ - C++:简化#define
我有一个#define,它生成一个枚举类和一个生成的枚举类的相应输出运算符。(见下文)
在这个例子中可以像这里一样使用它:
这里生成的输出:
我的解决方案有一些限制:
- 每个枚举都需要一个初始化值
- 固定为 7 个枚举值
对于更普遍的用法,我有两个问题。特别是第二个将极大地增加可用性。
这里有我的任何问题:
- 如何避免为每个枚举值定义一个初始化值?
(就像在真正的枚举中一样) - 有什么想法可以概括 #define 以使用任意数量的值?
我正在等待您对我的代码的评论和改进建议。
雷纳
gnu-make - 为什么我不能在(加载)定义它的 scm 文件后使用我的宏?
我正在使用 GNU Make 中的 guile 支持,我偶然发现了这个奇怪之处:define-syntax
我在“my-gmk.scm”文件中定义和使用的宏按预期工作:
但是,如果我(load)
将 scm 文件放在另一个 scm 文件中,并尝试以相同的方式使用相同的宏:
它失败并显示以下错误消息:
我想了解为什么会发生这种情况。
我的 GNUmakefile 很简单
c - 禁止 C 预处理器在另一个宏中使用宏
我正在尝试看看我可以在多大程度上滥用 C 预处理器,并且我偶然发现了一个有趣的问题。
我有以下宏定义:
这应该允许我写:
如果我只使用if
and ,它工作得非常好else
,除了引入elif
是有问题的,因为宏扩展为:
由于else
被定义。
有什么方法可以在不被预处理器拾取的情况下elif
使用“原始” ?else
我想我需要尝试嵌套多个定义来欺骗预处理器直接粘贴单词而不解析它,但我不知道如何实现这一点。
有什么想法,或者这在 GCC 中是不可能的吗?
编辑:
本质上,这可以归结为以下问题:
对于两个给定的定义A
和B
,我怎样才能A
仍然解析到字面意思B
而不是通过第二个定义并最终成为C
?