Вопрос

Какова историческая причина того, что 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.)

Это было полезно?

Решение

  

Семантика 'break' или 'last'   определяется языком (в данном случае   Perl), не вами.

     

Почему бы не думать о "последнем" как о "   последнее утверждение, чтобы бежать за   петля & Quot;.      

Меня всегда удивляло, что   оператор 'continue' в 'C' запускает   следующий проход цикла. Это   безусловно, странное использование   Понятие «продолжить». Но это   семантика 'C', поэтому я принимаю это.

     

При попытке сопоставить   концепции программирования в единый   Английские слова с существующим значением   всегда будет какая-то   несоответствия странности

источник

Плюс, Ларри Уолл немного странный. Вы видели его фотографию?

 Ларри Уолл
(источник: wired.com )

Другие советы

Я ожидаю, что это потому, что Perl был создан лингвистом, а не программистом. При обычном использовании английского языка концепция объявления о том, что вы завершили свой последний проход через цикл, более тесно связана со словом «последний». (" это последний проход "), чем на слово " break " ( break цикла » break вне цикла»? - даже неясно, как «перерыв» предназначен для выхода из цикла) .

Термин «последний» имеет больше смысла, когда вы помните, что можете использовать его не только с непосредственным цикличным управлением. Вы можете применить его к помеченным блокам на один или несколько уровней выше блок, в котором он находится:

 LINE: while( <> ) {
      WORD: foreach ( split ) {
           last LINE if /^__END__\z/;
           ...
           }
      }

Это выглядит более естественно, чтобы сказать «последний» на английском, когда вы читаете его как " последнюю строку, если она соответствует ... ".

Есть еще одна причина, которую вы могли бы рассмотреть:

Last делает больше, чем просто управление циклом.

sub hello {
  my ( $arg ) = @_; 

  scope: { 
      foo(); 
      bar(); 
      last if $arg > 4; 
      baz(); 
      quux(); 
  }
}

Последний как таковой - это общий механизм управления потоком, не ограниченный циклами. Хотя, конечно, вы можете обобщить вышесказанное как цикл, который выполняется не более 1 раза, отсутствие цикла для меня указывает на «Break? Из чего мы вырываемся? & Quot;

Вместо этого я думаю о last " as " Перейти к позиции последней скобки " ;, которая для этой цели более семантически чувствительна.

Я задавал тот же вопрос Дамиану Конвею по поводу say . В Perl 6 будет введено say , которое представляет собой не что иное, как print , которое автоматически добавляет новую строку. Мой вопрос заключался в том, почему бы просто не использовать echo , потому что именно это echo делает в Bash (и, вероятно, в другом месте).

Он ответил: echo на 33% длиннее, чем скажем .

У него есть точка там. :)

Потому что он идет до последнего цикла. И потому что Ларри Уолл был странным парнем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top