В Smalltalk, метод с не являются автономными вещами.
Метод - это способ ответа объекта на отправку сообщения .
Если объект, который получает сообщение, знает, как ответить на сообщение, у него есть метод ответа на сообщение.Говорят, что имя сообщения содержится в сообщении объекта протокол .
Итак - каждое сообщение имеет получатель и имя сообщения .
A сообщение с ключевым словом также будет иметь один или несколько аргументов , с одним ключевым словом для каждого аргумента.
Обратная сторонаиз этого все методы являются частью объекта .Они хранятся в объектном определении класса как метод класса или метод экземпляра .
(Единственное исключение - в конкретном случае анонимные объекты, называемые blocks . В этих случаях метод определяется в определении блока ).
Вот пример сообщения с ключевым словом: Transcript show: 'Hello World!'
Это означает «отправить сообщение show: 'Hello World!'
получателю Transcript
».(Transcript - это окно, которое отображает вывод системы. Все графические среды Smalltalk имеют класс Transcript).
Это сообщение состоит из трех частей:
Самая левая частьвсегда приемник .В этом примере приемник равен Transcript
.
Имя сообщения show:
с одним ключевым словом, show:
Аргумент: 'Hello World'
(Еще более полное объяснение Transcript show: 'Hello World!'
можно найти в [http://beginningtosmalltalk.blogspot.com/2015/11/hello-world.html]
Пример сообщения с ключевыми словами с несколькими ключевыми словами:
aByteString copyReplaceAll: i1 with: i2
Получатель aByteString
,Экземпляр класса ByteString
Имя сообщения copyReplaceAll:with:
Имеет два ключевых слова: copyReplaceAll:
и with:
.
. Аргументы: i1
и i2
.
Если ByteString
Class (или любой класс над ним в иерархии классов, например String
), содержит метод, то сообщение находится в протоколе объекта.
string1 := 'Lemon' .
string1 copyReplaceAll: i1 with: i2
Если хотите, вы можете добавить свой код к String
или ByteString
в качестве дополнительного метода.
subst: i1 by: i2
"Substitute all instances of substring i1 with string i2.
Return the receiver"
^ self copyReplaceAll: i1 with: i2
Тогда его можно вызвать в рабочей области следующим образом:
string1 := 'Lemon'.
string2 := 'm'.
string3 := 'ss'.
string1 subst: string2 by: string3
Но string1 subst: string2 by: string3
не очень отличается от
string1 copyReplaceAll: string2 with: string3
Еще один стиль, на который следует обратить внимание: каждое ключевое слово вКлючевое сообщение должно быть максимально понятным и однозначным.subst
может означать substitute
или substring
Самый простой способ добавить метод к классу - использовать системный браузер.Щелкните «Класс» в системном браузере, и определение определения метода появится на панели редактирования.
Перепишите его и Accept it
(в моей системе с помощью щелчка правой кнопкой мыши на 2 или 3-кнопка мыши или сочетание клавиш «Ctrl-s» (хотя сопоставления мыши и клавиш могут различаться на разных платформах).