2014-11-26 5 views
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 

} 

그래서,이 방법은 [DataType1] 데이터 1을 설정하는()는 nullifyInstanceVars을 수정 = {}. 그것은 단지 함수 내에서만 범위가 지정된 새 변수를 만들고 실제로 요소를 지우지 않는다고 생각하기 때문에 작동하지 않습니다!

도움이 되시길 바랍니다.

답변

1

이것은 정말 Rascal 인터프리터의 버그처럼 보입니다. 나는 그것에 대한 버그 보고서를 제출할 것입니다.

private set[int] data1 = {}; 

당신이이 방법으로 문제가 해결되었는지 확인 할 수 : 약

작업도 선언에 data1를 초기화하는 것입니다?

+0

https://github.com/cwi-swat/rascal/issues/718 –

+0

참조 Ahhh .. 글쎄, 난 주위에 작품을 발견하고 내 스크립트는 내가 맘에 들지 않는 것보다 더 얽혀있다 상태. 그 동안, 나는 여러분이 권장 할 때 명시 적으로 초기화하는 다른 인스턴스 변수가 있음을 깨달았습니다. 그들은 결코 오류를보고하지 않았습니다. 따라서, 당신이 제안한대로해야합니다. 고마워 ... –

+0

또한, data1 = data1 + anElementOfType1을 말하고, 전에도 이것을 알아 차렸지만, 언제 일어날 지 예측할 수는 없습니다. –