1

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();
};

apply()戻り値を必要としないのと同様のspecmanのメソッドはありますか?

4

1 に答える 1

2

ここでの基本的な問題は、 を誤用したいということだと思いますapply()。この関数には関数型プログラミングの背景があり、その目的は、リストの各項目を実行して新しいリストを返すことです ( mapPython や Perlのように)。

関数が値を返さない場合の関数呼び出しの副作用に関心がある場合は、明示的なループを使用する方が適切です。map() と for の使用に価値はありますか?も参照してください。

これは、現時点では別の解決策を考えられないことを示しています。foo()値を返す関数でラップしている可能性がありますが、これは間違いなくオーバーロードのようです。

于 2009-07-02T10:09:56.113 に答える