是否有任何技术原因我缺少e没有静态字段/方法?
我查了LRM,没有提到这样的事情。有解决方法(比如这个:http ://www.specman-verification.com/index.php?entry=entry060612-105347 ),但我认为它不是一种特别干净的方法,因为它没有很好地封装。
好问题。不应该没有这样的技术原因,将静态成员添加到e结构可能是一个好主意。它的语义只需要仔细考虑,因为e的面向方面的特性与其他一些具有静态成员的语言无关(例如,需要回答的一个问题是是否可以扩展静态方法,例如,有is also
或没有)。
但是,这对我来说似乎不是很重要,因为静态字段实际上只不过是属于给定结构名称空间的全局字段(或方法,或任何其他类型的结构成员)。因此,即使没有静态成员,一个简单的解决方法是将此类成员添加到global
(或添加到sys
),并确保其名称具有明确“属于”给定结构的前缀。
不过,有一点很重要,它确实使静态成员不仅仅是global
. 在e中,就像在 C++ 中一样,也有template
类型。a 的静态成员一方面是由给定模板实例类型的所有实例对象template
共享的东西,但另一方面,对于每个模板实例(每个模板实例都是一个单独的结构)。
不确定上述链接中建议的基于端口的解决方法是否更好。我认为这是矫枉过正。
实际上,在我之前的回答中,我遗漏了一个重要的观点,它确实使静态成员不仅仅是global
.
在e中,就像在 C++ 中一样,也有template
类型。a 的静态成员一方面是由给定模板实例类型的所有实例对象template
共享的东西,但另一方面,对于每个模板实例(每个模板实例都是一个单独的结构)。
顺便说一下,静态结构成员被添加到 Specman v15.2 中的语言中。它们很方便,尤其是在静态的配置结构中:
extend packet_s {
static max_address : uint = 0x1000;
};
-- Change max_address for all instances
on xxx { packet_s::max_address = 0x2000; };
静态字段无法生成、物理(%) 或在 when 子类型中使用。以下是 teamspecman 博客的一些评论:e 中的静态成员
我认为 e 还没有静态结构成员的主要原因是您始终拥有全局和系统单例以及特定模块的顶级单元(这意味着更好的封装),其中“静态”信息可以是放置。除了定义精确语义的一些复杂性之外,没有特殊的技术原因。
作为单元访问的语法糖,你总是可以用非常基本的单字宏包装它——它不会完全无缝,因为这个神奇的词总是需要的,而不是“我”的本机可见的静态结构成员,但是仍然很容易使用。