У меня есть сценарий, в котором класс содержит две переменные экземпляра, которые являются взаимоисключающими. Это только один может быть создан за один раз. Если быть точным, у меня есть класс Promise (пытающийся добавить обещания в Pharo), и он содержит переменные экземпляра promiserrror и promiseValue. Затем я хочу реализовать метод "then: catch:".
Этот метод должен работать следующим образом:
promiseObject := [10/0] promiseValue.
promiseObject then : [ : result | Transcript crShow : result ]
catch : [ : failure | Transcript crShow : failure ] .
Я получил представление о том, как реализовать методы, которые принимают блок в качестве аргумента, из метода , который принимает блок, а блок принимает аргумент .
Моя попытка ниже, очевидно, не сработает, но я понятия не имею, как заставить ее работать.
then:aBlock catch: anotherBlock
|segment|
promiseValue ifNil: [ segment := promiseError ] ifNotNil: [ segment := promiseValue ].
promiseValue ifNil: [ segment := promiseValue ] ifNotNil: [ segment := promiseError ].
aBlock value:segment.
anotherBlock value: segment
Это должно работать аналогично блоку try-catch.