문제

그 역사적 이유는 무엇입니까? last 그것을 Perl에서보다는 불러옵니다 break C에서 호출되면?

Perl의 설계는 C의 영향을 받았기 때문에 (AWK, SED 및 SH -SH -MAN 페이지 참조), 친숙한 C 스타일의 브레이크/마지막 이름 지정과는 다른 추론이 있었을 것입니다.

Perl 1.000의 약간의 역사 (1987 년 12 월 18 일 출시) Man Page :

Perl]은 C, SED, AWK 및 SH의 가장 좋은 기능 중 일부를 결합하여 해당 언어에 익숙한 사람들이 거의 어려움을 겪지 않아야합니다. (언어 역사가들은 또한 CSH, Pascal, 심지어 기본 | 플러스의 일부를 주목할 것입니다.)

도움이 되었습니까?

해결책

'break'또는 'last'의 의미론은 당신이 아닌 언어 (이 경우 perl)에 의해 정의됩니다.

'마지막'을 "이것은 루프를 위해 실행되는 마지막 진술"이라고 생각하지 않겠습니까?

'C'의 '계속'진술이 다음 루프의 다음 패스를 시작하는 것은 항상 이상해졌습니다. 이것은 "계속"이라는 개념의 이상한 사용입니다. 그러나 그것은 'C'의 의미론이므로 받아들입니다.

특정 프로그래밍 개념을 기존의 영어 단어로 매핑하려고 시도함으로써 기존의 의미를 가진 단일 영어 단어에 항상 영향을 미치는 이상한 점이있을 것입니다.

원천

또한 래리 벽은 좀 이상합니다. 그의 사진을 본 적이 있습니까?

Larry Wall
(원천: Wired.com)

다른 팁

나는 이것이 컴퓨터 과학자가 아닌 언어 학자에 의해 Perl이 만들어 졌기 때문이라고 기대합니다. 정상적인 영어 사용에서, 루프를 통해 최종 패스를 완료했다고 선언하는 개념은 "마지막"이라는 단어와 더 밀접하게 연결되어 있습니다 ( "이것은 마지막 "break"라는 단어보다 ")부서지다 루프 "?"부서지다 루프에서 "? -"브레이크 "가 루프를 종료하는 것과 관련이있는 것은 명확하지 않습니다).

'마지막'이라는 용어는 즉각적인 루핑 제어 이상으로 사용할 수 있다는 것을 기억할 때 더 의미가 있습니다. 다음과 같은 블록 위의 하나 이상의 레벨에 레이블이 붙은 블록에 적용 할 수 있습니다.

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

"마지막 줄이 일치한다면 ..."로 읽을 때 영어로 "마지막"이라고 말하기 위해 더 자연스럽게 읽습니다.

다음과 같은 추가 이유가 있습니다.

마지막은 단지 루프 제어 이상을 수행합니다.

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

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

마지막으로 루프에 국한되지 않는 일반적인 유량 제어 메커니즘이 있습니다. 물론, 위를 최대 1 번 실행하는 루프로 일반화 할 수 있지만, 나에게 루프가 없으면 "브레이크? 우리는 무엇을 깨뜨리고 있습니까?"

대신, 나는 "last"AS"의 위치로 점프 마지막 이 목적을위한 브레이스 "는 의미 적으로 합리적입니다.

나는 Damian Conway에게 같은 질문을하고 있었다. say. Perl 6이 소개됩니다 say, 그 이상은 아닙니다 print 자동으로 Newline을 추가합니다. 내 질문은 왜 단순히 사용하지 않는지였습니다 echo, 이것은 무엇이기 때문입니다 echo Bash (그리고 아마도 다른 곳)에 있습니다.

그의 대답은 echo 보다 33% 더 길다 say.

그는 거기에 요점이 있습니다. :)

루프의 마지막으로 이동하기 때문입니다. 그리고 래리 월은 이상한 사람 이었기 때문입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top