Как однозначно идентифицировать окно стенограммы в Pharo / Squeak? - PullRequest
5 голосов
/ 08 апреля 2011

Я новичок в smalltalk и, как и все другие языки программирования, которые я выучил, я пытался создать простую программу "hello world". Я узнал, что в Pharo / Squeak вы открываете окно расшифровки, набираете следующий код в окне рабочей области и затем нажимаете Alt-d для его запуска:

Transcript show: 'hello world'; cr.

Насколько я понимаю, под строкой подразумевается отправка сообщения "show" с аргументом "hello world" объекту Transcript, и, как и ожидалось, в моем окне теперь отображается:

hello world

пока все хорошо, однако, когда я открыл второе окно расшифровки и снова запустил код, я обнаружил, что оба окна расшифровки теперь имеют:

hello world

Как будто оба окна стенограммы идентифицируются идентификатором «Транскрипт». Это то, что сбило меня с толку, потому что я подумал бы, что окна стенограммы должны быть «экземплярами» класса окна стенограммы. Следовательно, не должен ли быть способ их уникальной идентификации?

Ответы [ 2 ]

11 голосов
/ 10 апреля 2011

Это сложный и отличный вопрос.Smalltalk имеет большой словарь, в котором хранятся все глобальные переменные.Глобалы обычно являются классами, но там может быть любой объект.Это просто словарь (ключ / значение).Этот большой словарь, о котором я говорю, называется Smalltalk.Напишите «Smalltalk осмотреть», и вы увидите это.Это уникальный экземпляр класса SmalltalkImage.

Итак ... когда в коде вы набираете MyClass, это происходит потому, что в значении Smalltalk at: #MyClass у вас есть класс.Но вы также можете сделать: Smalltalk по адресу: #mariano put: 'mariano'.Затем вы можете написать «Мариано» везде, и вы получите строку «Мариано».

Стенограмма такая.В (Smalltalk at: #Transcript) хранится уникальный экземпляр Transcript.Который, действительно, может быть не экземпляром класса Transcript, а другим классом.В pharo это экземпляр ThreadSafeTranscript.Проверьте это:

ThreadSafeTranscript instanceCount -> 1 Открыть запись.Стенограмма открыта.Стенограмма открыта.

И она у вас всегда будет.Потому что сам Transcript - это МОДЕЛЬ.Не вид.Представление (окна, которые открываются при открытии Transcript) - это экземпляры PluggableTextMorph, модель которого является уникальным экземпляром Transcript.Проверьте это:

PluggableTextMorph instanceCount - >> 11 Открытие стенограммы.Стенограмма открыта.Стенограмма открыта.PluggableTextMorph instanceCount - >> 14

Для получения более подробной информации выполните отладку "Transcript open".

Cheers

3 голосов
/ 08 апреля 2011

Transcript - это глобальная переменная, содержащая экземпляр. Осмотрите его, чтобы увидеть его класс и, таким образом, посмотрите, как открыть другое окно, на которое вы бы поместили локальную ссылку.

...