我遇到过使用'private'范围标识符定义了几个模块级实例变量的情况。我需要这样做,因为这些变量将用于模块中的几个函数。此外,其中一些变量是“列表”或“集合”。我意识到这些变量的值在模块内的某个函数的重复调用之间仍然存在。这是预期的。
我也在创建一个测试,我会重复调用其中一个函数。我更希望获得实例变量的新副本(就像Java中的实例成员一样)。我似乎无法这样做。如果我试图取消列表/集合的内容,我会遇到如下问题:
module foo::bar
private set[DataType_1] data1;
public void nullifyInstanceVars( )
{
//tried
data1={}
}
//method that gets called repeatedly:
public void repeatCallMe(..)
{
nullifyInstanceVars( );
...
..
//Throws an error like: trying to add an element of type 1 to set[void]
data1 += anElementOfType1
}
因此,我修改了nullifyInstanceVars()方法以设置[DataType1] data1 = {}。它不起作用,因为我相信只是创建一个仅在函数范围内的新变量,并且真的不清除元素!
感谢任何帮助...
答案 0 :(得分:1)
这看起来像是Rascal解释器中的一个错误。我会为它提交一份错误报告。
解决方法是在声明中初始化data1
:
private set[int] data1 = {};
您能否确认这可以解决您的问题?