Почему "последний" называется "последним" в Perl?
Какова историческая причина того, что last
называется в Perl, а не break
, поскольку он вызывается в C?
На дизайн Perl повлиял C (в дополнение к awk, sed и sh - см. справочную страницу ниже), поэтому, должно быть, были некоторые соображения позади того, что вы не идеализировали название C-стиля break/last.
Немного истории из Perl 1.000 (выпущена 18 декабря 1987 года):
[Perl] сочетает (по мнению автора, в любом случае) некоторые из лучших особенностей C, sed, awk и sh, поэтому люди, знакомые с этими языками, должны иметь с ним небольшие трудности. (Языковые историки также заметят некоторые остатки csh, Pascal и даже BASIC | PLUS.)
Ответы
Ответ 1
Семантика 'break' или 'last' определяется языком (в данном случае Perl), а не вами.
Почему бы не думать о "последнем" как о "этом последнем операторе, выполняемом для цикла".
Мне всегда казалось странным, что оператор continue в C запускает следующий проход цикла. Это определенно странное использование понятия "продолжить". Но это семантика "С", поэтому я принимаю это.
При попытке отобразить конкретные концепции программирования в единичные английские слова с существующим значением всегда возникает какая-то странная странность
Источник
Кроме того, Ларри Уолл немного странный. Вы видели его фотографию?
(источник: wired.com)
Ответ 2
Я ожидаю, что это потому, что Perl был создан лингвистом, а не ученым-компьютером. В обычном английском языке концепция объявления того, что вы завершили свой последний проход через цикл, более тесно связана со словом "последний" ( "это последний проход" ), чем с словом "break" ( "break the loop" "вырваться из цикла"? - он даже не ясно, как "разрыв" предназначен для выхода из цикла).
Ответ 3
Термин "последний" имеет больше смысла, когда вы помните, что вы можете использовать его не только с помощью непосредственного управления циклом. Вы можете применить его к помеченным блокам одного или нескольких уровней выше
блок находится в:
LINE: while( <> ) {
WORD: foreach ( split ) {
last LINE if /^__END__\z/;
...
}
}
Более естественно читать "последним" на английском языке, когда вы читаете его как "последняя строка, если он соответствует...".
Ответ 4
Это дополнительная причина, которую вы, возможно, захотите рассмотреть:
Последний делает больше, чем просто управление контуром.
sub hello {
my ( $arg ) = @_;
scope: {
foo();
bar();
last if $arg > 4;
baz();
quux();
}
}
Последний как таковой является общим механизмом управления потоком, не ограниченным циклами. Конечно, вы можете обобщить приведенное выше как цикл, который выполняется не более 1 раза, отсутствие петли для меня означает "Разрыв? Из чего мы вырвались?"
Вместо этого я думаю о "last
" как "Перейти к позиции последней скобки", которая для этой цели более семантически разумна.
Ответ 5
Я задал тот же вопрос Дамиан Конвей о say
. Perl 6 представит say
, который не более чем print
, который автоматически добавляет новую строку. Мой вопрос: почему бы просто не использовать echo
, потому что это то, что echo
делает в Bash (и, возможно, в другом месте).
Его ответ был: echo
на 33% длиннее say
.
У него есть точка.:)
Ответ 6
Потому что он переходит к последнему из цикла. И поскольку Ларри Уолл был странным парнем.