문제

그것은 좋은 아이디어를 따옴표 키를 사용할 경우 해시 Perl?

나는 작업에서 매우 큰 기존 펄 코드 기지하고 채택하는 많은 모범 사례에 의해 제안된 데미안 콘웨이에서 Perl 모범 사례.내가 알고 있는 최고의 관행 민감한 주제와 프로그래머,하지만 희망을 얻을 수 있는 몇 가지 좋은 답이 없이 시작하는 화염 전쟁입니다.또한 난 이것은 아마도가 많은 사람들의 주장하지 않을 통해 그것 때문에는 사소한 문제이지만,나를 얻으려고 단단한 목록의 지침을 따라 내가 일하는 내 방법을 통해 이 기본 코드.

Perl 최고의 관행을 예약에 의해 Damian 웨이, 가,이 예는 방법을 보여줍니다 맞춤는 데 도움이의 가독성이 코드 섹션이지만,그것을 언급하지 않는(어디서나 이 책에서는 찾을 수)에 대해 아무것도 인용하는 이 해시 키를 사용합니다.

$ident{ name   } = standardize_name($name);
$ident{ age    } = time - $birth_date;
$ident{ status } = 'active';

지 않을 것이다면 따옴표를 강조하지 않은 것을 사용하여 베 단?

$ident{ 'name'   } = standardize_name($name);
$ident{ 'age'    } = time - $birth_date;
$ident{ 'status' } = 'active';
도움이 되었습니까?

해결책

상수 문자열 해시 키를 지정할 때는 항상 (단일) 따옴표를 사용해야합니다. 예, $hash{'key'} 이 문제에 대해 생각할 필요성을 없애고 일관된 형식을 초래하기 때문에 이것은 최선의 선택입니다. 때때로 인용문을 떠나면 키에 내부 과민, 공간 또는 기타 특수 문자가 포함되어있을 때 추가해야합니다. 너 ~ 해야 하다 이 경우 인용문을 사용하여 일관되지 않은 형식으로 이어집니다 (때로는 인용되지 않고 때로는 인용). 인용 된 키는 또한 편집자가 구문을 밝힐 가능성이 높습니다.

다음은 "때때로 인용, 다른 시간에 인용되지 않은"컨벤션을 사용하는 예가 있습니다.

$settings{unlink-devices} = 1; # I saved two characters!

그것은 잘 컴파일합니다 use strict, 그러나 런타임에 기대하는 것을 잘하지는 않습니다. 해시 키는 문자열입니다. 문자열은 내용에 적합한 것으로 인용해야합니다. 문자 그대로의 단일 따옴표, 가변 보간을 허용하는 이중 인용문. 해시 키를 인용하십시오. 가장 안전한 컨벤션이며 이해하고 따르는 가장 간단한 컨벤션입니다.

다른 팁

따옴표 없이는 더 좋습니다. {}에 있으므로 바레 노드를 사용하지 않는 것이 분명합니다. 그리고 읽고 입력하기가 더 쉽습니다 (두 개의 더 적은 기호). 그러나이 모든 것은 물론 프로그래머에 달려 있습니다.

나는 결코 작은 따옴표 해시 키를 사용합니다.나는 알{}기본적으로 작동과 같은 따옴표지를 제외하고,특별한 경우에는(a+,그리고 큰따옴표).내 편집기를 알고 이것은 너무,그리고 저에게 몇 가지 색상을 기반 신호는 것을 확인했을 것입니다.

을 사용하신 사방을 보라""방어 연습에 의해 만들어 냈는 알지도 못하는 사람 Perl.저장 키보드의를 착용하고 배우는 Perl:)

와 호언장담 밖의 방법으로,진짜 이유는 내가 이것을 게시한다 다른 코멘트를 놓친 것 같다는 사실 + 것이다"맺는"bareword.는 것을 의미 작성할 수 있습니다:

sub foo {
    $hash{+shift} = 42;
}

또:

use constant foo => 'OH HAI';
$hash{+foo} = 'I AM A LOLCAT';

그래서 그것은 매우 분명 +shift 수단 전화"shift"기능과 shift 의 의미는"문자열의'변화'".

나는 것입니다 또한 포인트는 cperl-mode 하이라이트의 모든 다양한 경우습니다.지 않는 경우,핑에 나 IRC 그것을 수정합니다:)

(아,그리고 한가지 더 있습니다.나는 견적 특성을 이름에서는 사슴 같이, has 'foo' => ....이 습관이 나에서 선택 작업 스테반,그리고 내가 생각하지만 그것은 보인다.그것은 약간의 일치하지 않는의 나머지와 함께 나의 코드입니다.어쩌면 나는 중지하고 그것이 곧.)

quoteless 해시 키는 Larry Wall로부터 구문 수준의 관심을 받아 모범 사례 외에는 다른 이유가 없을 것입니다. 인용문을 땀을 흘리지 마십시오.

(우연히 배열 키에 따옴표 ~이다 PHP의 모범 사례는 수많은 e_warnings를 언급하지 않고 사용하지 못하는 데 심각한 결과가있을 수 있습니다. Oka in Perl! = php.)

나는 이것에 대한 모범 사례가 있다고 생각하지 않습니다. 개인적으로 나는 다음과 같은 해시 키로 사용합니다.

$ident{'name'} = standardize_name($name);

그러나 화살표 연산자의 왼쪽에 사용하지 마십시오.

$ident = {name => standardize_name($name)};

왜 그런지 묻지 마세요, 그것은 내가하는 방식입니다 :)

나는 당신이 할 수있는 가장 중요한 일은 항상, 항상, 항상, 항상 :

use strict;
use warnings; 

이렇게하면 컴파일러가 의미 론적 오류를 포착하여 어떤 방식 으로든 결정을 내릴 가능성이 줄어 듭니다.

그리고 두 번째로 가장 중요한 것은 일관된 것입니다.

나는 입력하고 읽고 걱정하기 때문에 인용문없이 간다. 자동 인용되지 않는 열쇠가있는 시대는 모든 추가 작업과 혼란의 가치가 없어서 적습니다. 아마도 내가 선택한 해시 키는 내 스타일에 맞게 변경되었을 것입니다. 에지 케이스를 완전히 피하십시오.

내가 사용하는 것과 같은 이유입니다 " 기본적으로. 보간을 원하지 않는 캐릭터를 사용하는 것보다 문자열 중간에 변수를 펄럭이는 것이 더 일반적입니다. 즉, 나는 더 자주 썼다 'Hello, my name is $name' ~보다 "You owe me $1000".

At least, quoting prevent syntax highlighting reserved words in not-so-perfect editors. Check out:

$i{keys} = $a;
$i{values} = [1,2];
...

I prefer to go without quotes, unless I want some string interpolation. And then I use double quotes. I liken it to literal numbers. Perl would really allow you to do the following:

$achoo['1']  = 'kleenex';
$achoo['14'] = 'hankies';

But nobody does that. And it doesn't help with clarity, simply because we add two more characters to type. Just like sometimes we specifically want slot #3 in an array, sometimes we want the PATH entry out of %ENV. Single-quoting it add no clarity as far as I'm concerned.

The way Perl parses code makes it impossible to use other types of "bare words" in a hash index.

Try

$myhash{shift}

and you're only going to get the item stored in the hash under the 'shift' key, you have to do this

$myhash{shift()}

in order to specify that you want the first argument to index your hash.

In addition, I use jEdit, the ONLY visual editor (that I've seen--besides emacs) that allows you total control over highlighting. So it's doubly clear to me. Anything looking like the former gets KEYWORD3 ($myhash) + SYMBOL ({) + LITERAL2 (shift) + SYMBOL (}) if there is a paranthesis before the closing curly it gets KEYWORD3 + SYMBOL + KEYWORD1 + SYMBOL (()}). Plus I'll likely format it like this as well:

$myhash{ shift() }

Go with the quotes! They visually break up the syntax and more editors will support them in the syntax highlighting (hey, even Stack Overflow is highlighting the quote version). I'd also argue that you'd notice typos quicker with editors checking that you ended your quote.

It is better with quotes because it allows you to use special characters not permitted in barewords. By using quotes I can use the special characters of my mother tongue in hash keys.

You can precede the key with a "-" (minus character) too, but be aware that this appends the "-" to the beginning of your key. From some of my code:

$args{-title} ||= "Intrig";

I use the single quote, double quote, and quoteless way too. All in the same program :-)

I've wondered about this myself, especially when I found I've made some lapses:

 use constant CONSTANT => 'something';
 ...
 my %hash = ()
 $hash{CONSTANT}          = 'whoops!';  # Not what I intended
 $hash{word-with-hyphens} = 'whoops!';  # wrong again 

What I tend to do now is to apply quotes universally on a per-hash basis if at least one of the literal keys needs them; and use parentheses with constants:

 $hash{CONSTANT()} = 'ugly, but what can you do?';

I've always used them without quotes but I would echo the use of strict and warnings as they pick out most of the common mistakes.

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