当前位置:  开发笔记 > 编程语言 > 正文

Perl是否有枚举类型?

如何解决《Perl是否有枚举类型?》经验,为你挑选了5个好方法。

Perl是否具有遵循最佳实践的枚举类型,或者更重要的是,它是否需要一个?

我正在工作的项目使用遍布各处的字符串来表示通常在C#等语言中使用Enum的内容.例如,我们在一组哈希中有一组电话号码,每个电话号码与电话类型("主页","工作","移动"等)相关联:

$phone_number->{type} = 'Home';

在这里使用只读变量集还是使用Enum是否足够?我enum在CPAN上找到了一个模块,但似乎使用了违反Perl最佳实践之一的单词.我对使用只读变量的想法是这样的:

use Readonly;

Readonly my $HOME   => 'Home';
Readonly my $WORK   => 'Work';
Readonly my $MOBILE => 'Mobile';

$phone_number->{type} = $HOME;

这是一个好方法还是有更好的方法?



1> Ronald Blasc..:

不,没有内置的枚举构造.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";



2> Nathan Fellm..:

实际上Perl确实有像C一样的枚举类型.试试这个细节.

perldoc 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则支持它.


因为我可以说,"使用enum"是一个CPAN模块,不是核心语言的一部分.
@paul nathan ......我不确定那会阻止某人使用它.大量的perl功能不是核心的一部分.

3> Ray Booysen..:

Perl本身不支持该概念,但有一些模块可以添加此功能

https://metacpan.org/pod/enum



4> jrockway..:

你的方式绰绰有余.

如果您正好使用Moose,也可以使用Moose :: Util :: TypeConstraints创建枚举.(你应该是哪个.)



5> 小智..:

我担心perl在这些枚举和命名常量时是完全截瘫的:

enum和Readonly不是核心模块(至少在perl 5.8,我刚刚检查过).因此,在没有安装新模块的自由的系统上,这些可能是不可用的.

"使用常量"和"使用严格"(一个应该总是使用)是完全不可用的,因为它会生成一堆形式的可怕错误消息:

使用"严格潜艇"时不允许使用Bareword"FRED"

让我们希望他们已经在perl 6中解决了这个烂摊子,如果它能看到光明的那一天!


常量不打印警告,并且在5.8中也没有:`perl -e'使用严格的qw(subs); 使用常量FRED => q {fred}; printf qq {Perl%vd \nConstant is%s \n},$ ^ V,FRED'`赋予`Perl 5.8.4 Constant is fred`并且没有警告.(是的,我意识到这个答案已有几年了......)
推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有