2014-11-26 3 views
0

У меня возникла ситуация, когда я определил пару переменных экземпляра на уровне модуля, используя идентификатор области «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 = {}. Это не работает, потому что я считаю, что просто создает новую переменную, ограниченную только внутри функции, и на самом деле не очищает элемент!

Любая помощь приветствуется ...

ответ

1

Это действительно похоже на ошибку в интерпретаторе Rascal. Я напишу отчет об ошибке.

Обходной инициализировать data1 в декларации, а также:

private set[int] data1 = {}; 

Можете ли вы подтвердить, что это решает проблему?

+0

См. Https://github.com/cwi-swat/rascal/issues/718 –

+0

Ahhh .. ну, я нашел работу вокруг, и, кроме того, мой сценарий стал более запутанным, чем мне удобнее разгадать его государство. Тем временем я понял, что существуют другие переменные экземпляра, где я явно инициализирую, как вы рекомендуете; и они никогда не сообщали о каких-либо ошибках. Таким образом, это должно быть так, как вы предложили. Спасибо ... –

+0

Кроме того, попробуйте вместо этого сказать data1 = data1 + anElementOfType1, я заметил это раньше, но это немного непредсказуемо, когда это произойдет. –

 Смежные вопросы

  • Нет связанных вопросов^_^