openlang

Поиск классов Smalltalk до выполнения их определений

Хотелось бы выполнять примерно такой код:

BaseItem subclass: #FirstItem instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DEMO2'.
FirstItem subclass: #SecondItem instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DEMO2'.

не вычисляя каждую строку отдельно.

При этом получаю ошибку о необъявленном имени FirstItem, хотя к моменту выполнения следующей строки это объявление уже будет существовать.

Можно ли как-нибудь обойти эту проблему?

Переведено с английскогоПоказать оригинал

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Чтобы разрешить имя класса позднее, обратитесь к словарю глобальных имён Smalltalk (его можно изучить через инспектор и браузер). Методы доступа вроде classNamed: и at: позволяют получить класс, имени которого ещё может не существовать во время компиляции всего выражения, которое вы собираетесь выполнить.

    BaseItem subclass: #FirstItem instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DEMO2'.
    (Smalltalk classNamed: #FirstItem) subclass: #SecondItem instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DEMO2'.
    Переведено с английскогоПоказать оригинал
  2. Ссылка на ответ

    В некоторых диалектах Symbol понимает сообщение asClass, поэтому можно написать следующее:

    BaseItem subclass: #FirstItem instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DEMO2'.
    #FirstItem asClasss subclass: #SecondItem instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'DEMO2
    Переведено с английскогоПоказать оригинал

Другие стороны того же вопроса

  1. Как случайно выбирать варианты enum в GDScript на Godot 3.3, не перечисляя их?

    Вот объявление enum, которое я использую в GDScript: Хочу случайно выбирать вариант enum, не перечисляя все возможные вариант…

    Ответы 2Последняя активность gdscript
  2. Синтаксис остатка в Nim

    Как в Nim записать операцию взятия остатка? cell % 7 == 0 выдаёт undeclared identifier: '%' Ни поиск в Google, ни просмотр SO…

    Ответы 2Последняя активность nim
  3. Возврат результата из функции APL

    Как сделать так, чтобы моя функция возвращала значение после завершения выполнения? Например, у меня есть: ROUTINE N ? N ⍴ 12…

    Ответы 2Последняя активность apl