Почему undef оценивает, становятся допустимой ссылкой на массив в Perl?

От Код, Завершенный

8 Безопасного программирования

8.2 Утверждений

, утверждение является кодом that’s используемый во время development— обычно стандартная программа или macro—, который позволяет программе проверяться, когда это работает. Когда утверждение верно, который означает, что все работает как ожидалось. Когда it’s ложь, которая означает его, обнаружила неожиданную ошибку в коде. Например, если система предполагает, что файл потребительской информации никогда не будет иметь больше чем 50 000 записей, программа могла бы содержать утверждение, что количество записей меньше или равно 50 000. Пока количество записей меньше чем или равно 50 000, утверждение будет тихо. Если это встретится больше чем с 50 000 записей, однако, это будет громко “assert”, что существует ошибка в программе.

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

утверждение обычно берет два аргумента: булево выражение, которое описывает предположение that’s предполагаемый быть верным и сообщение, чтобы отобразиться если это isn’t.

(†¦)

Обычно, Вы don’t хотят, чтобы пользователи видели сообщения утверждения в производственном коде; утверждения, прежде всего, для использования во время разработки и обслуживания. Утверждения обычно компилируются в код во время разработки и компилируются из кода для производства. Во время разработки утверждения спугивают противоречащие предположения, неожиданные условия, плохие значения передали стандартным программам и так далее. Во время производства они компилируются из кода так, чтобы утверждения don’t ухудшили производительность системы.

9
задан Sinan Ünür 29 October 2009 в 14:14
поделиться

2 ответа

Прочтите статью Ури Гуттмана об автовивификации .

В этом нет ничего странного, если вы знаете об этом и избавляет от многих неудобств.

Perl сначала оценивает выражение разыменования и видит, что текущее значение ссылки не определено. Он отмечает тип разыменования (скаляр, массив или хеш) и выделяет анонимную ссылку этого типа. Затем Perl сохраняет это новое ссылочное значение, в котором было сохранено неопределенное значение. Затем выполняемая операция разыменования продолжается. Если вы выполняете вложенное выражение разыменования, то каждый уровень сверху вниз может вызывать свою собственную автовивизацию.

11
ответ дан 4 December 2019 в 08:15
поделиться

Авто-оживление - вот слово. По ссылке:

Автовивификация - отличительная черта программирования на Perl. язык с участием динамических создание структур данных. Автовивификация происходит автоматически создание ссылки на переменную, когда разыменование неопределенного значения. В другими словами, автовивификация Perl позволяет программисту обращаться к структурированная переменная и произвольная подэлементы этого структурированного переменная, без явного объявления существование переменной и ее заполнить структуру заранее.

В в отличие от других языков программирования либо: 1) требуется, чтобы программист явно объявить всю переменную структура перед использованием или ссылкой на любая его часть; или 2) требуется программист объявить часть структура переменных перед обращением к любая его часть; или 3) создать присвоение части переменной перед ссылкой, назначением или составление выражения, которое относится к

Автовивикацию Perl можно сравнить с такими языками, как Python, PHP, Ruby, JavaScript и всеми языками в стиле C.

Автоматическое оживление можно отключить с помощью без автовивификации;

15
ответ дан 4 December 2019 в 08:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: