Ключевое слово сообщения в Smalltalk (Начинающий) (Pharo) - PullRequest
1 голос
/ 22 марта 2012

Я пытаюсь создать метод стиля сообщения с ключевым словом, но не могу понять, как получить доступ к Receiver изнутри метода. Я уверен, что это просто, но я нигде не могу найти ответ. То, что я пытаюсь реализовать, является излишним, но я все же хотел бы знать, как оно работает.

subst: i1 by: i2
      ^ self copyReplaceAll: i1 with: i2.

Он будет вызываться в рабочей области следующим образом:

string1 := 'Lemon'.
string2 := 'm'.
string3 := 'ss'.
string1 subst: string2 by: string3.

Сообщение об ошибке: «MessageNotUnderstood: ByteString >> subst: by:»

Все, что должен сделать метод, - это заменить каждое вхождение "m" в "Lemon" на "ss", чтобы создать "Lesson" (что уже делает copyReplaceAll). Я не могу понять, как получить string1 в метод. Любая помощь будет принята с благодарностью,

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 22 марта 2012

self - текущий объект (т.е. получатель).

Пожалуйста, прочитайте (или хотя бы прочитайте) учебник, чтобы получить основы.


"MessageNotUnderstood: ByteString>>subst:by:"

Эта ошибка означает, что вы не определили сообщение в ByteString. Либо вам не удалось определить его где-либо, либо вы определили его в неправильном классе.

0 голосов
/ 16 ноября 2015

В 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» (хотя сопоставления мыши и клавиш могут различаться на разных платформах).

...