2009-11-30 10 views
2

Squeak는 객체 지향적이므로 다른 함수에 매개 변수로 함수를 전달할 수 있어야한다는 것을 확실히 알고 있습니다. 그러나 이것에 대한 연구를하고 있는데 이것에 대한 정보를 찾을 수 없었습니다 . 내 직감이 맞습니까? 그렇다면 어떻게 완료되며 이후에 어떻게 호출합니까?Squeak에서 매개 변수로 함수 전달하기

답변

1

두 가지 다른 것을 혼동하고 있습니다. Smalltalk에서 전달하는 유일한 실제 "함수"는 블록입니다. 블록을 인자로 쓰는 것만으로 통과합니다 (모든 ifTrue:에서와 같이). 개체에 메시지를 보내고 메시지를 동적으로 결정하려면 메시지 이름을 기호 (예 : #value)로 전달하고 개체 (예 : perform:)로 보낼 수 있습니다. 인스턴스 메서드 자체는 전달하지 않습니다. 선택자 기호를 전달하거나 메소드를 호출하는 메시지를 보내는 블록을 전달하십시오.

+0

기호를 전달한다고 가정합니다. 어떻게 그것을 객체로 전송 된 메시지로 "변환"합니까? – EpsilonVector

3

길게 대답.

실행 가능한 코드를 메서드에 전달하려면 블록을 사용하십시오.

있어서 정의

method: aBlock 
    aBlock value 

이고

object method: [ Transcript show: 'hello' ]. 

을 다음과 같이, 코드 부분에 대한 파라미터를 전달 인자를 가진 블록을 사용하려는 경우이를 실행한다.

있어서 정의

method: aBlock 
    aBlock value: 'parameter' 

이고

object method: [ :arg | Transcript show: arg ]. 

2 개 무제한 파라미터를 수행 할 수있는 동일한을 다음과 같이 메소드를 value:value: 및 블록 valueWithArguments:을 사용하여 실행한다.

기호를 전달하는 경우 value:을 사용하여 실행할 수도 있습니다. 기호는 실제로는 [ :arg | arg symbol ] 형식의 블록과 같습니다.

관련 문제