如何避免模块之间的名称冲突?从文档来看,目前 Rascal 中的模块之间似乎没有原则性的名称管理。导入模块时,public导入模块中声明的所有名称都进入范围。有没有办法合格进口?或者会有吗?
又是一个好问题:-) 简短的回答是,您可以在两次导入相同名称的模块中限定使用站点的名称。
长答案有三层:
extend机制(与 相对import)将支持将来在扩展时间重命名。import使用相同名称的两个模块而存在歧义时,该名称将在当前模块的使用位置进行限定。类型检查器会建议一些适当的内容(当它被发布时)。
int a = f;假设 f 是从模块 A 和模块 B 导入的),您应该编写:int a = A::f或int a = B::f来解决歧义。data A = a();从一个模块与 合并data A = b(),相同的语法syntax Exp = Exp "+" Exp;与 合并syntax Exp = Exp "*" Exp;,对于函数:int f(int i) = 1;与 合并int f(real r) = 1;。A::f(1)以防止使用合并版本。int f(int i) = 1;来自一个模块与int f(value x) = 2;来自另一个模块)。