문제

어떤 방법을 사용하여 일정한 해시 키?

예를 들어:

use constant X => 1;

my %x = (X => 'X');

위의 코드는 해시를 만들과 함께"X"으로 핵심지 1 으로 핵심이다.반면,내가 원하는 값을 사용하여 일정한 X 으로 핵심이다.

도움이 되었습니까?

해결책

use constant 실제로 일정한 서브 루틴.

무엇을 원할 필요가 명시적으로 호출 하위:

use constant X => 1;

my %x = ( &X => 'X');

use constant X => 1;

my %x = ( X() => 'X');

다른 팁

또 다른 옵션은 사용하지 사용이 일정한 pragma 플립을 읽기 전용으로 당 권장 사항에서는 Perl 최상의 방법으로 데미안 Conway.

저 전환 잠시 후 다시 깨닫는 일정한 해시 ref 의 일정을 참조하여 해시,하지만 아무것도하지 않는 데이터에 대한 내부 해시입니다.

Readonly 구문을 만듭니다"일반"변수이지만,실제로 적용하 constantness 또는 readonlyness.당신은 그것을 사용할 수 있는 것처럼 다른 변수로는 핵심입니다.


use Readonly;

Readonly my $CONSTANT => 'Some value';

$hash{$CONSTANT} = 1;

귀하의 문제는=>마법의 쉼표는 자동으로 따옴표는 단어 앞에습니다.그래서 당신이 쓴에 해당하('X','X').

가장 간단한 방법은 쉼표를 사용:

my %x = (X, 'X');

또는,추가할 수 있습니다 다양 한 문장 그래서 당신은 더 이상 간단한 단어 앞에는=>:

my %x = ( X() => 'X' );
my %x = ( &X => 'X' );

$hash{CONSTANT()}$hash{+CONSTANT} 을 방지하 bareword 인용 메커니즘에서 발로습니다.

From: http://perldoc.perl.org/constant.html

대부분의 다른 사람들은 당신의 질문에 대답니다.이와 함께,이러한 만들기를 매우 자세한 설명은 문제가 및 권고 해결 방법이 있습니다.문제는 Perl pragma"사용하여 일정한"정말로 만들어 서브루틴에서 현재 패키지는 누구의 이름은 첫 번째 인수의 pragma 고 값이 마지막입니다.

In Perl,한 서브루틴을 선언하고 있지 않고 괄호.

이해"상수"은 단순히 하루,당신은 이유를 볼 수 있습니다 그들은 보간에서 문자열 및 이유를"지방 쉼표로"운영자"=>"는 따옴표는 왼쪽 손을 인수를 생각하는 당신 손으로 그것이 문자열(도에 내장 된 다른 기능이 같은 시간()및 키()언젠가와 지방이에 쉼표를 위한 여분의 재미).

다행히도,당신을 호출할 수 있습니다 지속적인 사용하여 명시적인 구두점과 같은 괄호 또는 앰퍼샌드 인장.

그러나 나는 당신을 위한 질문:왜 당신은 당신을 사용하여 상수 위해 해시 키니까?

나는 생각할 수 있는 몇 가지 시나리오로 이어질 수도 있습니다 이 방향으로:

  1. 당신이 원하 제어하는 키에 해시입니다.

  2. 추상화하려는 이름의 열쇠는 경우에 이러한 변경 이후

의 경우에는 수 1,상수도 없이 저장이다.대신,고려 만들기 클래스가 있는 공 setter 및 getters 채우는 해시만 볼 수 있다.이것은 매우 유엔 Perl 같은 솔루션이지만,매우 쉽게 할 수 있다.

의 경우에 2 번,나는 여전히 강하게 옹호를 위해 클래스입니다.에 액세스하는 경우 해시는 규제를 통해 잘 정의된 인터페이스만을 구현한 클래스에 대한 책임을 얻고 해시 키 이름이 옳습니다.어떤 경우에,나는 않을 것이 좋을 사용하여 상수다.

희망이 도움이 시간 내주셔서 감사합니다.

use constant pragma 만듭 서브루틴 프로토타입하수는 인수를 사용하지 않습니다.동 like a C-style 정,그것은 정말로 서브루틴을 반환하는 일정한 값입니다.

=> (지방 쉼표)는 자동으로 따옴표는 왼쪽 피연산자가 bareword 고,$해시{key}표기 합니다.

는 방법으로 사용하는 경우의 일정한 이름처럼 보이는 bareword,인용 메커니즘이고 당신이 그것의 이름으로 대신 키의 값을 의미합니다.이를 방지하기 위해 변경을 사용하도록 아 bareword.예를 들어:

use constant X => 1;
%hash = (X() => 1);
%hash = (+X => 1);
$hash{X()} = 1;
$hash{+X} = 1;

이니셜라이저에서,당신도 사용할 수 있는 일반 쉼표하는 대신:

%hash = (X, 1);

=>운영자을 해석하는 그것의 왼쪽으로"문자열",방법 qw()는 않습니다.

을 사용하여 시험

my %x = ( X, 'X');

하나의 방법으로 캡슐화하 X(X):

my %x ( (X) => 1 );

또 다른 옵션은 멀리 할'=>'사용','대신:

my %x ( X, 1 );

코멘트@shelfoo(명성을 충분하지 않습니다 추가 코멘트이다.)

완전에 대해 동의 펄 최상의 방법으로 데미안 Conway...그 읽어보도록 적극적으로 권장합니다.

그러나 주시기 바랍 읽 뿐만 아니라 모듈을 추천한 해설 는 유용한"에라"을 사용할 계획인 경우 뿐만 아니라 위에서 스타일 가이드입니다.

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