2011-10-12 6 views
2

私はユニットテストフレームワーク(IoCheck)を書いています。整数が偶数かどうかを返すisEvenやジェネレータのリストlist(genInt)などのプロパティを受け入れるメソッドforAllがあります。Ioのブロックに動的引数リストを適用するにはどうすればよいですか?

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

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

forAll(isEven, list(genInt)) 

ないすべての整数は偶数なので、出力は次のようになります。

***Failed! 
57 

forAllは、リスト内の値を格納し、発電機を呼び出しますその値をプロパティに100回適用します。プロパティがfalseを返す場合、テストケースは失敗とみなされ、問題の値が画面に出力されます。

これを行うには、forAllは未知のアリティのブロックを受け入れ、引数のリストで呼び出す必要があります。私はこれをする方法を知らない。

注:これはIo language 'apply arguments'と同じではありません。その場合、コードでは機能は認識されますが、機能は認識されないためです。この場合、コードはどちらも認識しません。

答えて

1

更新:Block callWithArgListがIoマスターブランチに追加されました。

Paragonが答えます。このスニペットをコードに追加すると、任意のBlockオブジェクトにメッセージ "callWithArgList"を送信できます。

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

Lispのapplyのように機能します。

関連する問題