사양에서 void를 반환하는 메소드와 함께 "apply ()"사용
문제
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()
가치 회복 함수에서는 확실히 과부하로 보입니다.
제휴하지 않습니다 StackOverflow