Cadence文档中两者的区别并不明显。 有人可以详细说明两者之间的区别吗?
答案 0 :(得分:1)
define as
宏只是一个普通的旧宏,您可能从其他编程语言中了解到这一点。它只是意味着在宏代码中的某些选定位置,您可以替换自己的代码。
define as computed
宏允许您通过使用控制流语句(if,for等)以编程方式构造输出代码。它有点像一个返回字符串的函数,返回值是由预处理器插入其代码的代码。
答案 1 :(得分:1)
使用定义为和定义为计算宏,您可以定义给定语法类别的新语法结构(例如,<statement>
或{{1并且,您实现了替换代码,该替换代码替换了与宏匹配表达式(或模式)匹配的构造。
在这两种情况下,宏匹配表达式都可以具有在替换代码中使用的语法参数,并用匹配代码中使用的实际代码字符串替换。
不同之处在于,使用定义为宏,替换代码只是写在宏体中。 使用定义为计算宏,您可以编写一个过程代码,计算所需的替换代码文本并将其作为字符串返回。它实际上是一种返回字符串的方法,您甚至可以使用结果关键字来分配结果字符串,就像在任何 e 方法中一样。 当替换代码未修复时,定义为计算宏非常有用,并且可以根据确切的宏参数值甚至语义上下文而有所不同(例如,在某些情况下,可以使用反射查询决定确切的替换代码)。 (但重要的是要记住,即使定义为计算宏在编译期间而不是在运行时执行,因此它们无法查询字段或变量的实际运行时值以决定生成的替换代码)。
以下是两种宏类型之间的一些重要差异。