0

「プライベート」スコープ識別子を使用して、いくつかのモジュール レベルのインスタンス変数を定義した状況があります。これらの変数はモジュール内のいくつかの関数で使用されるため、これを行う必要があります。また、これらの変数の一部は「リスト」または「セット」です。これらの変数の値は、モジュール内の特定の関数を繰り返し呼び出しても保持されることに気付きました。これは予想通りです。

関数の 1 つを繰り返し呼び出すテストも作成しています。インスタンス変数の新しいコピーを用意したいと思います (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( ) メソッドを set[DataType1] data1={ } に変更しました。関数内でのみスコープが設定された新しい変数を作成するだけで、実際には要素をクリアしないと信じているため、機能しません!

どんな助けでも大歓迎です...

4

1 に答える 1

1

これは本当に Rascal インタープリターのバグのようです。バグレポートを提出します。

回避策data1は、宣言でも初期化することです。

private set[int] data1 = {};

これで問題が解決したことを確認できますか?

于 2014-11-26T21:32:03.337 に答える