Как однозначно идентифицировать окно стенограммы в Pharo/Squeak?
Я новичок в smalltalk и, как и все остальные языки программирования, которые я выучил, я попытался создать простую программу "Hello World". Я узнал, что в Pharo/Squeak вы открываете окно расшифровки, набираете следующий код в окне рабочей области и затем нажимаете Alt-d для его запуска:
Transcript show: 'hello world'; cr.
Насколько я понимаю, под строкой подразумевается отправка сообщения "show" с аргументом "hello world" объекту Transcript, и, как и ожидалось, мое окно теперь показывает:
hello world
однако пока все хорошо, когда я открыл второе окно записи и снова запустил код, я обнаружил, что оба окна записи теперь имеют:
hello world
Как будто оба окна стенограммы идентифицируются идентификатором "Транскрипт". Это то, что сбило меня с толку, потому что я подумал бы, что окна стенограммы должны быть "экземплярами" класса окна стенограммы. Следовательно, не должен ли быть способ уникальной идентификации их?
2 ответа
Это сложный и отличный вопрос. 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".
ура
Transcript - это глобальная переменная, содержащая экземпляр. Осмотрите его, чтобы увидеть его класс и, таким образом, посмотрите, как открыть другое окно, на которое вы бы поместили локальную ссылку.