2011-10-12 23 views
2

我在寫一個單元測試框架(IoCheck)。將有一個forAll方法接受一個屬性,如isEven,它返回一個整數是否是偶數,以及一個發電機列表list(genInt)如何在Io中的塊中應用動態參數列表?

的語法如下所示:

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

forAll(isEven, list(genInt)) 

由於不是所有的整數均勻,輸出如下:

***Failed! 
57 

forAll將調用發電機,存儲在列表中的值,並將這些值應用到屬性100次。如果該屬性返回false,則測試用例將被視爲失敗,並且會將違規值打印到屏幕上。

爲了做到這一點,forAll必須接受一個未知數的塊並用參數列表來調用它。我不知道該怎麼做。

注意:這與Io language 'apply arguments'不一樣,因爲在那種情況下,代碼知道的是arity而不是函數。在這種情況下,代碼將不會知道。

回答

1

更新:Block callWithArgList已被添加到Io master分支。

Paragon已經有答案了。將此片段添加到您的代碼中,您將能夠向Block對象發送消息「callWithArgList」。

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

它很像Lisp的apply函數。

相關問題