2016-08-04 7 views
3

per5에서는 "my"를 사용하지 않고 $ foo 또는 @bar와 같은 변수 만 사용할 수 있습니다.왜 perl6은 자동으로 활성화되지 않아 "내"를 항상 사용할 필요가 없습니까?

$foo=1; @bar=(1,2); 

왜 perl6에서 "내"를 항상 사용해야합니까? 그렇지 않으면 컴파일러는 변수 선언을하지 않을 것입니다. 왜 perl6은 자동 갱신을 할 수 없습니까?

print "{my @a=1,2,3;}\n"; # have to use "my" to declare variable 
print "{@a=1,2,3;}\n"; # this is error 'Variable '@a' is not declared' 

나는 항상 "my"를 사용하지 않아도된다는 제한을 좋아하지 않습니다. 이것은 C와 같이 너무 낮은 레벨입니다. 매우 성가신.

항상 자동 동기화를 켜는 방법이 있습니까?

감사합니다.

+2

그것이 이전 버전에서 작동했던 방식이기 때문에 기본적으로 유일한 방법입니다. 'use strict'와'use warnings '(또는 당신을 대신해서 그렇게하는 다른 선언문)으로 Perl 5 코드를 시작하지 않으면, 당신은 끔찍한 Perl 5 코드를 작성하고있는 것입니다. 필자는 "Modern Perl"(저자/발행인이 무료로 제공)이라는 책을 읽는 것이 좋습니다. –

+2

이것은 C와 같은 낮은 수준이 아닙니다. 오히려 매우 높은 수준입니다. 어셈블리와 같이 매우 낮은 수준의 프로그래밍에서는 원하는 RAM 주소를 사용할 수 있습니다. 원하는 RAM 주소를 먼저 사용해야합니다. 잊어 버리면 실수로 두 개의 변수에 동일한 RAM 주소를 사용하게되어 버그가 발생할 수 있습니다. 'my'는 당신이 언어에 힌트를주는 것을 허용합니다 : 이봐, 여기가 내 변수를 선언하는 곳입니다. 컴파일러가 선언하기 전에 사용하면 불평 할 수 있습니다. 컴파일러가 두 번 선언하면 컴파일러에서 불평 할 수 있습니다. 그렇다면 실수를 저지른 것입니다. – slebetman

+1

* "이전 버전에서 작동했던 방식이기 때문에 기본적으로 그 방법이 유일한 이유입니다."* 그러나 이전에는 그런 방식이 아니 었습니다. 기본적으로 모든 Perl 5 변수는 패키지 변수입니다. Perl 5 방식이 잘못되어 기본값이되었습니다. – Borodin

답변

10

명시 적 변수 선언이없는 것은 다양한 이유로 언어 디자인의 관점에서 끔찍한 생각입니다. 분명히 명시 적으로 블록 범위의 어휘 변수를 선언하는 방법이 있습니다. '스크립팅'의 다양한 언어가이 '잘못된'언어를 얼마나 많이 가져 왔는지 궁금합니다 (let이 자바 스크립트에 추가 된 이유가 있습니다 ...)

즉, Perl6은 선언을 생략 할 수있는 no strictpragma를 지원합니다.

4
no strict; 
$foo=1; @bar=(1,2); 
print "{@a=1,2,3;}\n"; 
# OUTPUT«1 2 3␤» 

Perl 6은 적절한 오류 메시지를 표시하려고합니다. 모든 변수를 선언하면 오타가있는 경우 어떤 변수를 사용했는지 추측 할 수 있습니다. 또한 선언 자없이 작성할 수없는 상수 및 sigilless 변수와 같은 새로운 언어 기능이 있습니다.

+1

좋아요! 생각을 공유해 주셔서 감사합니다. 나는 "엄격하지 않은"자유를 좋아한다고 생각합니다. – lisprogtor

+3

@lisprogtor : 불행히도 "자유"에는 언어가보고하지 않는 버그를 작성할 자유가 포함되어 있습니다. 가장 최근의 예를 보자면 OP가 찾지 못했던 [* FASTA를 사용하고 모든 시퀀스를 뒤 바꾸는 Perl 스크립트 작성 *] (http://stackoverflow.com/questions/38775912/)을 살펴보십시오. 버그는'$ NUM_COL'과'$ NUM_C0L'을 모두 사용하여 발생했습니다. 'my' 키워드는 너무 자주 사용되기 때문에 가장 짧은 키워드 중 하나이며''엄격하지 않음 ''을 두 줄 이상 사용하는 프로그램은 잘못 작성된 프로그램입니다. – Borodin