質問

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で方法はありますか?

役に立ちましたか?

解決

私はここで基本的な問題は、あなたが誤使用のapply()にしたいということだと思います。私は、この関数は、いくつかのの関数型プログラミングの背景とその目的は、リストの各項目に何かをして、(PythonやPerlでmapなど)の新しいのリストを返すことですしていると言うでしょうます。

あなたは、明示的なループを使用して、より正確な、関数が値を返さない場合は、ある関数呼び出しのの副作用の、に興味がある場合。以下のための対マップを()を使用してに値があるも参照してください?

これは私が現時点で別の解決策を考えることはできませんと述べました。たぶん、値を返す関数でfoo()をラップするが、これは間違いなく、過負荷ようです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top