假设我有两个文件,都叫foo.e
,但位于不同的目录中。该文档提到无法导入两者。因为一旦加载了第一个文件,就会跳过第二个文件。
这只是Specman的限制还是有更深层次的原因?
答案 0 :(得分:2)
这是一个相当哲学的问题 - 这是一个限制还是一个特征。
在 e 中有一个模块的概念。每个加载或编译的 e 文件都成为模块,源文件名(不带扩展名)成为模块名称。 模块名称应该是唯一的。 我可以看到一些原因。 首先,在许多情况下显示模块名称(前缀为" @")以引用特定模块。例如,在消息或错误消息中,提供源引用。 其次,模块在Reflection API中由 rf_module 对象表示,并且可以按名称查询这些对象。
我可以看到的另一个可能更深层次的原因是 import 语句的处理方式。如果有两个或多个引用同一文件的 import 语句,则只有第一个生效(将相应模块的内容带入系统),其他文件将被忽略。现在,如果允许多个具有相同名称的模块,则会导致以下问题:我们如何确定给定的 import 语句是否引用相同的将文件作为之前的 import 语句(因此应该被忽略),或者它引用的是一个恰好具有相同名称的不同文件?仅仅比较确切明确说明的路径是不够的,因为相同的文件可以通过不同的路径引用(相对,绝对,通过符号链接等)。
由于提到了所有这些原因,人们仍然可以声称它们只是技术性的(而非概念性的),并且这些问题可能已经以某种方式处理。所以,我不能给出一个明确的答案是否是一个限制。