2011-10-12 3 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', потому что в этом случае код знает арность, но не функцию. В этом случае код не будет знать ни того, ни другого.

ответ

1

Обновление: Block callWithArgList был добавлен в ветвь мастера Io.

Paragon имеет ответ. Добавьте этот фрагмент к вашему коду, и вы сможете отправить любой объект блока сообщение «callWithArgList».

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

Он работает как apply функции Lisp в.

 Смежные вопросы

  • Нет связанных вопросов^_^