Perl에 열거 형이 있습니까?
Perl 에 모범 사례를 준수 하는 열거 형 이 있습니까? 아니면 더 중요한 것은 필요합니까?
내가 일하고있는 프로젝트는 어디에서나 문자열을 사용하여 일반적으로 C #과 같은 언어로 Enum을 사용하는 것을 나타냅니다. 예를 들어, 해시 배열에 전화 번호 세트가 있으며, 각각 전화 유형 ( "집", "직장", "모바일"등)과 연결되어 있습니다.
$phone_number->{type} = 'Home';
여기에서 읽기 전용 변수 세트를 사용하는 것으로 충분합니까 아니면 Enum을 사용해야합니까? enumCPAN 에서 모듈을 찾았 지만 Perl Best Practices 중 하나를 위반하는 단어를 사용하는 것 같습니다 . 읽기 전용 변수 사용에 대한 내 생각 은 다음과 같습니다.
use Readonly;
Readonly my $HOME => 'Home';
Readonly my $WORK => 'Work';
Readonly my $MOBILE => 'Mobile';
$phone_number->{type} = $HOME;
이것이 좋은 접근 방식입니까 아니면 더 나은 방법이 있습니까?
아니요, 내장 열거 형 구조가 없습니다. Perl은 엄격한 타이핑을 많이하지 않으므로 실제로 입력 할 필요가 거의 없다고 생각합니다.
제 생각에는 Readonly당신이 사용한 접근 방식은 견고합니다.
더 전통적인 constantpragma도 있습니다.
use constant {
HOME => 'Home',
WORK => 'Work',
MOBILE => 'Mobile',
};
$phone_number->{type} = HOME;
뒤에서 값을 반환하는 각 상수에 대한 함수를 설정합니다.
sub HOME () { 'Home' }
Readonly예를 들어 다음과 같이 해당 속성을 활용하지 않으려면 다음 과 같이하겠습니다 .
package Phone::Type;
use constant {
HOME => 'Home',
#...
};
package main;
print Phone::Type->HOME, "\n";
Perl은 실제로 C와 같은 enum 유형을 가지고 있습니다. 자세한 내용을 보려면 이것을 시도하십시오.
예를 들면 :
use enum qw(HOME WORK MOBILE);
이제 우리는 :
HOME == 0
WORK == 1
MOBILE == 2
indeces를 직접 설정할 수도 있습니다.
use enum qw(HOME=0 WORK MOBILE=10 FAX);
이제 우리는 :
HOME == 0
WORK == 1
MOBILE == 10
FAX == 11
봐 여기에 자세한 내용은.
모든 버전의 Perl에서 지원되는 것은 아닙니다. v5.8.3은 지원하지 않지만 v5.8.7은 지원합니다.
Perl doesn't support the concept natively but there are modules to add this functionality
Your way is more than adequate.
You can also create enums with Moose::Util::TypeConstraints, if you happen to be using Moose. (Which you should be.)
I'm afraid perl is completely paraplegic when it comes to these enums and named constants:
enum and Readonly are not core modules (at least at perl 5.8, which I just checked). So these may be unavailable on a system where one has no freedom to install new modules.
"use Constant" with "use strict" (which one should always use) is completely unusable, as it generates a load of horrible error messages of the form:
Bareword "FRED" not allowed while "strict subs" in use
그들이 펄 6에서이 엉망진창을 정리했으면 좋겠습니다.
이것은 나를 위해 잘 작동했습니다 ...
use constant MYENUM => qw(ZERO ONE TWO THREE FOUR);
BEGIN {
eval "use constant (MYENUM)[$_] => $_;" foreach 0..(MYENUM)-1;
}
그런 다음 ZERO, ONE, TWOetc를 상수 로 사용 하고를 사용하여 기호 이름을 인쇄 할 수 있습니다 (MYENUM)[$value].
참고 URL : https://stackoverflow.com/questions/473666/does-perl-have-an-enumeration-type
'Program Club' 카테고리의 다른 글
| Android 프로파일 러를 사용할 때 앱이 계속 충돌합니다. (0) | 2020.12.13 |
|---|---|
| PHP에서 템플릿 시스템을 사용해야하는 이유는 무엇입니까? (0) | 2020.12.12 |
| % 02d와 std :: stringstream? (0) | 2020.12.12 |
| SQL Server 데이터베이스의 모든 스키마 목록을 가져 오는 방법 (0) | 2020.12.12 |
| 줄 번호를 입력하지 않고 gdb를 사용하여 줄을 건너 뛸 수 있습니까? (0) | 2020.12.12 |