2

単体テストフレームワーク ( IoCheck ) を作成しています。整数が偶数かどうかを返す などのプロパティを受け取るメソッドと、ジェネレーターのリストがありforAllます。isEvenlist(genInt)

構文は次のようになります。

isEven := block(i, i % 2 == 0)

forAll(isEven, list(genInt))

すべての整数が偶数であるとは限らないため、出力は次のようになります。

***Failed!
57

forAllジェネレーターを呼び出し、値をリストに格納し、値をプロパティに 100 回適用します。プロパティが false を返す場合、テスト ケースは失敗と見なされ、問題のある値が画面に出力されます。

これを行うにはforAll、不明なアリティのブロックを受け入れ、引数のリストを指定して呼び出す必要があります。これを行う方法がわかりません。

注: これは、 Io 言語の 'apply arguments'と同じではありません。その場合、コードはアリティを認識しますが、関数は認識しないためです。この場合、コードはどちらも認識しません。

4

1 に答える 1

1

更新: Block callWithArgListIo master ブランチに追加されました。

パラゴンには答えがあります。このスニペットをコードに追加すると、任意の Block オブジェクトにメッセージ「callWithArgList」を送信できるようになります。

getSlot("Block") callWithArgList := method(argList,
    getSlot("self") doMessage(argList asMessage setName("call"))
)

これは Lisp のapply関数のように機能します。

于 2011-10-12T18:09:53.253 に答える