0

我有一种情况,我使用“私有”范围标识符定义了几个模块级实例变量。我需要这样做,因为这些变量将在模块内的多个函数中使用。此外,其中一些变量是“列表”或“集合”。我意识到这些变量的值在对模块中某个函数的重复调用之间持续存在。这正如预期的那样。

我还在创建一个测试,我在其中重复调用其中一个函数。我希望拥有实例变量的新副本(就像 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={ }。它不起作用,因为我相信这只是创建了一个仅在函数范围内的新变量,并且实际上并没有清除元素!

任何帮助表示赞赏...

4

1 回答 1

1

这看起来真的像 Rascal 解释器中的一个错误。我会为它提交一个错误报告。

解决方法是data1在声明中进行初始化:

private set[int] data1 = {};

您能否确认这可以解决您的问题?

于 2014-11-26T21:32:03.337 回答