У меня есть расширение Pharo, которое добавляет обещания к Pharo Smalltalk. Затем я использую расширение обещания, чтобы сделать банковский перевод со следующим банковским приложением. Счет связывается с банком, чтобы перевести деньги на другой счет. Этот код завершается с ошибкой SubscriptOutOfBounds: 5 . Я посмотрел на Рекурсивный метод в pharo выдает #SubscriptOutOfBounds: 8 . В нем говорится о границах массивов, но я понятия не имею, где я мог бы использовать массивы в своей реализации, если это не делает стек. Отладчик говорит кое-что о массивах, но на данный момент это слишком загадочно для меня. Обещания прекрасно работают с другими примерами, но не для этого конкретного примера. И, похоже, ошибка возникает из-за закомментированного кода в Account >> перевод: на:
Ниже находится счет >> перевод: на:
transfer: amount to: account
| bank promise|
bank := Bank new.
(availability > (lowerLimit + amount)) ifTrue: [ availability := availability - amount.
promise := [ bank transfer: amount from: self to: account ]promiseValue.
"promise
then: [ :respose |
respose
ifTrue: [ self reduceBalance: amount ] ]
catch: [ :error | ^error ] "]
ifFalse: [ ^ self ].
А это банк >> перевод: сумма: от: до:
transfer: amount from: anAccount1 to: anAccount2
|transfered|
transfered := false.
(anAccount1 availableBalance < anAccount1 lowerLimit + amount)
ifTrue:
[self error: 'Account lower Limit reached', (anAccount1 lowerLimit) printString ]
ifFalse:
[ self deposit: amount to: anAccount2. transfered := true ].
^transfered
Что может быть причиной этой ошибки?