Вот что происходит, когда я пытаюсь попасть в ловушки, упомянутые вами в Писк и Дельфин , две реализации динамического языка Smalltalk 80 .
Вы можете назначить переменную со случайным именем, которое никогда не читается
Язык Smalltalk требует объявления переменных temp и instance. Если я пытаюсь скомпилировать метод, содержащий неопределенную переменную, я получаю ошибку во время компиляции.
| anArray |
anArrray := Array with: 2 with: 1. "Unknown variable anArrray"
Создание переменных динамически - это не то, что динамические языки должны допускать. Есть разница между объявлениями без типов и вообще без объявлений.
Вы можете вызывать методы, которые не существуют
Компилятор выдает предупреждение, если вы используете селектор (, т.е. имя метода ), который полностью неизвестен.
Компилятор не будет беспокоиться, если я вызову метод paint
для массива, потому что в системе есть другой класс, реализующий paint
. Эта ошибка будет обнаружена только во время выполнения.
Если, однако, я вызываю метод sortt
(в то время как я собираюсь вызвать sort
), компилятор выдает предупреждение. При разработке сверху вниз вы можете пропустить эти предупреждения.
| anArray |
anArray := Array with: 2 with: 1.
anArray paint. "Runtime error. You can't paint an array but perhaps a Shape"
anArray sortt. "Compile-time warning"
Вы можете ссылаться на классы, которые не
есть
Это не разрешено. Хотя в Squeak вы можете быстро создать новый класс из диалога ошибок, если это необходимо.