2013-03-25 2 views
5

Я новичок Smalltalk, в настоящее время играю с Pharo, и мне любопытно выбрать в сообщении подкласса: ключевое слово instanceVariableNames хочет что-то, способное ответить на сообщение subStrings , Интересно, почему он не ожидает чего-то более структурированного, как массив, так как требуется набор символов.Почему instanceVariableNames является строкой, а не более структурированной коллекцией

Object subclass: #Experiment instanceVariableNames: #(#foo #bar). 

Мои только гадать, что это какая-то историческая причина: может быть, не все Smalltalks имеют массивы или их синтаксис отличается гораздо проскользнуть во внутреннее сообщение в качестве подкласса. Есть ли другие объяснения?

ответ

3

в видении документа Pharo, одна из точек, чтобы изменить это и есть реальное представление о переменных экземпляра Проверьте эти ссылки, если вы заинтересованы:.

+0

Спасибо, очень интересные ссылки. – eMMe

2

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

Что касается самого массива, он присутствовал в спецификации Smalltalk-80, поэтому они довольно распространены. (Не как динамические массивы { expr1 . expr2 . expr3}, которые были введены в писк.

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

+0

Действительно, новый ClassBuilder примет реальные массивы для имен переменных экземпляра. – camillobruni

Смежные вопросы