2011-10-12 5 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 기능처럼 작동합니다.

관련 문제