【发布时间】:2009-06-25 10:28:44
【问题描述】:
在Does Perl have an enumeration type? 的基础上,我如何执行动态类型检查(或静态类型检查,如果 use strict 能够这样做)我的子例程参数正在获取正确的枚举类型?
package Phone::Type;
use constant {
HOME => 'Home',
WORK => 'Work',
};
package main;
sub fun
{
my ($my_phone_type_enum) = @_;
# How to check my_phone_type_enum, is either Phone::Type->HOME or Phone::Type->WORK or ... but not 'Dog' or 'Cat'?
}
fun(Phone::Type->HOME); # valid
fun(Phone::Type->WORK); # valid
fun('DOG'); # run-time or compile time error
【问题讨论】:
-
fun('Home')应该有效还是无效?
-
注意Phone::Type->HOME是类方法调用;如果您希望内联常量,请使用 Phone::Type::HOME。
-
fun('家'); # 理想情况下,它应该是无效的。但是,使用思南Unur提供的解决方案,很难将其标记为无效。所以,我还是可以接受的。不完美,但它适用于我的情况。
-
您是否声称 fun('Home') 已被我的代码接受?
-
是的。传递字符串 fun('HOME') 将在您的代码中被接受。
标签: perl enums validation subroutine