Я пытаюсь создать метод для существующего класса BlockClosure. Это метод, который мы написали на доске в классе, но он не ведет себя так, как мне хотелось бы. Это код:Smalltalk, используя 'value' on BlockClosure
BlockClosure extend[
times: count[
count = 0
ifTrue:
[^self value.]
ifFalse:
[self value. self times: count - 1.].
]
].
Я попытался тестирования его, вводя это в интерпретатор GST:
st> x:= 5
5
st> y := [x-1] times: 4.
a BlockClosure
Но я хочу, чтобы у равен 1, в этом случае. Почему значение y становится «BlockClosure»?
EDIT: правильный метод времени.
BlockClosure extend[
times: count[
count = 0
ifFalse:
[self value. ^self times: count - 1.].
]
].
Спасибо! Оказывается, он по-прежнему возвращает «BlockClosure», но это значение y. Если я проверил значение x, оно изменилось. – Isaac
Он возвращает BlockClosure, потому что ваш фиксированный метод «times:» не имеет явного возврата, поэтому он неявно возвращает self. –