문제

Specman에는 다음과 같습니다 apply() 목록의 모든 요소에 대해 동일한 동작을 수행하는 방법 :

var a: list of int;
a = somefunction.that.returns.list.of.int();
var b:= a.apply(it * 2);

어디에 apply() 다음과 같습니다.

for each in a {
    b.add(it.*2);
};

이제 요소에 대한 메소드를 호출하고 싶다면 a, 나는 사용할 수있다 apply() 메소드가 값을 반환하는 한. 그러나 내가 가지고 있다면 :

struct bar {
    x: int;

    foo() is {
       message(LOW, "x is ", x); 
    };
};

그리고 나는 노력한다 :

var a: list of bar;
a = somefunction.that.returns.list.of.bar();
a.apply(it.foo());

컴파일하지 않기 때문입니다 foo() 보고 void. 대신, 나는 명시적인 루프를 사용해야합니다.

for each in a {
    it.foo();
};

Specman에는 비슷한 방법이 있습니까? apply() 반환 값이 필요하지 않습니까?

도움이 되었습니까?

해결책

여기서 기본적인 문제는 당신이 잘못 사용하고 싶다는 것입니다. apply(). 나는이 기능에 일부가 있다고 말할 것이다 기능적 프로그래밍 배경과 그 목적은 목록의 각 항목을 수행하고 새로운 목록 (좋아요 map 파이썬 또는 perl).

당신이 관심이 있다면 부작용 함수가 값을 반환하지 않으면 함수 호출 중에서 명시 적 루프를 사용하는 것이 더 정확합니다. 또한보십시오 map () vs를 사용하는 값이 있습니까?

이것은 현재 다른 해결책을 생각할 수 없다고 말했습니다. 아마도 포장 foo() 가치 회복 함수에서는 확실히 과부하로 보입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top