You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在宏内部创建宏时,如何区分当前宏参数与新宏参数?

问题分析与解决

你的代码运行结果为49而非21的核心原因是:mult_by定义的mult_by_$1宏并未引用调用时传入的参数,而是直接将mult_by的参数(7)与自身相乘,所以无论调用mult_by_7时传什么值,都会计算7*7=49。

正确实现方法

要让mult_by_$1能接收并使用调用时的参数,需要在宏定义中区分**mult_by的参数和mult_by_$1的调用参数**:

changequote([,])dnl
define([mult_by], [define(mult_by_$1, [eval($1 * [$1])])])dnl
mult_by(7)dnl
mult_by_7(3)

代码解释

  1. 当调用mult_by(7)时,展开为:define(mult_by_7, [eval($1 * 7)])——这里的[$1]会被替换为mult_by的参数7,而宏体中的$1则代表未来调用mult_by_7时传入的参数。
  2. 调用mult_by_7(3)时,宏体中的$1被替换为3,最终计算3*7=21,得到预期结果。

如果需要支持多参数传入(比如批量计算),也可以用$@来接收所有调用参数:

changequote([,])dnl
define([mult_by], [define(mult_by_$1, [eval($@ * [$1])])])dnl
mult_by(7)dnl
mult_by_7(3, 5)  # 会计算3*7和5*7,输出21和35

内容的提问来源于stack exchange,提问作者pietrodito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 08:55:15