[Magma]属性(Attributes)
介绍
对于 Magma 的任一种结构, 都可伴之某种属性. 属性其实就是一些值, 存储在结构中, 需要使用时就用其名字字段来引用它.属性与宏包
属性的使用在 packages 中是十分普遍的.
属性分为系统预定义属性和用户自定义属性两类
系统预定义属性
系统预定义属性的值在 Magma 启动时就自动赋予了. 可以使用 AssertAttribute 或 HasAttribute 来改变系统预定义属性的值. (为了保持向后兼容, HasAttribute 在某些时候还是可以使用的.)
对于任何可以作为 AssertAttribute 或 HasAttribute 的第一个有效参数的名字, 这个名字也是某个适当的类别结构的有效属性字段. 因此我们现在使用反引号(back quote `)方法来获取属性的值, 而不再使用旧的方法. 如
> S`Name := x;
完全等同于
> AssertAttribute(S, \"Name\", x);
函数 AssertAttribute 和 HasAttribute 的第二个参数都是字符串, 因此必须用双引号括起来.
类似的, 下面的代码
> if assigned S`Name then > x := S`Name; > // do something with x... > end if;
等价于
> l, x := HasAttribute(S, \"Name\"); > if l then > // do something with x... > end if;
注意: 当系统属性没有被设定时, 使用反引号 ` 引用它并不会触发计算其值(但相应的内在函数会计算, 如果存在的话), 反而会出现错误. 因此我们常用 assigned 来测试属性是否确实被设定了.