问题

软件 >> Magma
Questions in category: Magma (Magma).

[Magma]属性(Attributes)

Posted by haifeng on 2011-08-13 16:09:09 last update 2011-08-13 16:34:11 | Answers (0) | 收藏


介绍

对于 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 来测试属性是否确实被设定了.

用户自定义属性