В Smalltalk эквивалентом автономного метода является Block
(a.k.a. BlockClosure
). Вы создаете их, заключая выражения Smalltalk в квадратные скобки. Например
[3 + 4]
Чтобы оценить блок, вы отправляете ему сообщение value
:
[3 + 4] value
, который ответит 7
.
Блоки могут также иметь аргументы:
[:s | 3 + s]
вы оцениваете их с value:
[:s | 3 + s] value: 4 "answers with 7"
Если в блоке есть несколько предложений, вы разделяете их точкой, как в теле метода.
Добавление
Блоки в Smalltalk - это объекты первого класса. В частности, можно ссылаться на них с помощью переменных, то же самое можно делать с другими объектами:
three := 3.
threePlus := [:s | three + s].
для последующего использования
threePlus value: 4 "7"
Блоки могут быть вложенными:
random := Random new.
compare := [:p :u | u <= p]
bernoulli60 := [compare value: 0.6 value: random next].
Тогда последовательность:
bernoulli60 value. "true"
bernoulli60 value. "false"
...
bernoulli60 value. "true"
ответит с true
примерно в 60% случаев.