首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nim宏参数

Nim宏参数
EN

Stack Overflow用户
提问于 2015-07-07 13:21:58
回答 2查看 693关注 0票数 3

下面是我想编译的代码:

代码语言:javascript
复制
macro defineSomething(amount:expr):stmt=
   var amountInt = intVal(amount).int
   # Boring staff

defineSomething(42);

它工作得很完美。我的宏里有我想要的东西,我可以用我自己的方式操作员工。

但我认为,最好将魔术数字移除到某些const设置中:

代码语言:javascript
复制
const MAGIC_AMOUNT:int = 42

# Whole lot of strings
defineSomething(MAGIC_AMOUNT)

这个代码失败了。因为MAGIC_AMOUNT实际上不是整数值,不像42幻数。

那么,如何在nim宏中获取我的变量值呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-07 20:42:37

表达式是非类型。由于您确实希望获得整数,所以可以指定参数为打字,然后应该编译:

代码语言:javascript
复制
import macros

macro defineSomething(amount: typed):stmt=
  echo getType(amount)
  var amountInt = intVal(amount).int
  echo "Hey ", amount_int

const MAGIC_AMOUNT = 42
defineSomething(43)
defineSomething(MAGIC_AMOUNT)

或者只使用普通的int作为参数类型,除非您希望将其他类型也传递给宏中参数的仁爱上的case

票数 3
EN

Stack Overflow用户

发布于 2015-07-08 16:54:02

默认情况下,宏将接收AST表达式而不是值。如果宏需要处理具体值,则需要使用静态参数:

代码语言:javascript
复制
macro defineSomething(amount: static[int]): stmt=
  echo "int value: ", amount + 100

const MAGIC_AMOUNT = 42

defineSomething(43)
defineSomething(MAGIC_AMOUNT)

这将在编译时打印:

代码语言:javascript
复制
int value: 143
int value: 142
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31269770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档