#value : message의 반환 값은 블록에 전송 될 때 해당 블록의 마지막 문장의 값입니다. 그래서 [ 1 + 2. 3 + 4. ] value
은 7로 평가됩니다. 가끔은 사용하기가 어렵습니다. 명시 적으로 반환 값을 설정하고 블록 실행을 중지하는 방법이 있습니까?smalltalk 블록 - 명시 적으로 반환 값을 설정하고 블록 실행을 중단 할 수 있습니까?
운동을하려면 가상 #return : 메시지를 사용하지 않고이 블록을 다시 쓰고 얼마나 추한 지보십시오. 나는 뭔가를 놓치고 있어야합니다.
[ :one :two |
one isNil ifTrue: [ two isNil ifTrue: [ self return: nil ] ifFalse: [ self return: true ] ].
two ifNil: [ self return: false ].
(one > two)
ifTrue: [ self return: true ]
ifFalse: [ (one < two)
ifTrue: [ self return: false ]
ifFalse: [ self return: nil ]
].
]
편집 : 정말 넌센스이지만, 에서 이해하지 self return: sth
일부 수준 :
'value : nil value : nil'을 사용하여 해당 블록을 평가하면'무한대가 아닌'nil을 얻을 수 있습니다. – milan
@milan * one *과 * two *가 0 일 때 내 코드와 너의 코드가 모두 0이됩니다. 당신의 코드에서 :'[: one : two | 하나는 isNil ifTrue : [isNil ifTrue : [self return : nil] ... '내 코드에서 (Infinity = Infinity) 그래서 nil을 반환합니다. –
오, 알았습니다. 당신은 거의 내가 만든 진짜 질문에 대답하지 않고 바로 그것을 가지고 :)하지만 내 코드는 문자열과 아무것도 작동합니다. – milan