Necesito devolver un valor enum en perl, ¿cómo puedo hacer esto? debe Does Perl have an enumeration type?¿Cómo puedo crear un tipo de enumeración en Perl?
use strict;
use constant {
HOME => 'home',
WORK => 'work',
MOBILE => 'mobile',
};
my $phone_number->{type} = HOME;
print "Enum: ".$phone_number->{type}."\n";
pero no este índice de retorno 0:
tirando de este hilo? o estoy entendiendo esto mal?
EDIT:
Así que sería algo como esto ser más esperable para un tipo de enumeración?
use strict;
use constant {
HOME => 0,
WORK => 1,
MOBILE => 2,
};
my $phone_number->{type} = HOME;
print "Enum: ".$phone_number->{type}."\n";
editar # 2
También me gustaría para validar la opción seleccionada, pero pasar de nuevo a la Palabra en lugar de Valor. ¿Cómo puedo tener lo mejor de ambos ejemplos?
@VALUES = (undef, "home", "work", "mobile");
sub setValue {
if (@_ == 1) {
# we're being set
my $var = shift;
# validate the argument
my $success = _validate_constant($var, \@VALUES);
if ($success == 1) {
print "Yeah\n";
} else {
die "You must set a value to one of the following: " . join(", ", @VALUES) . "\n";
}
}
}
sub _validate_constant {
# first argument is constant
my $var = shift();
# second argument is reference to array
my @opts = @{ shift() };
my $success = 0;
foreach my $opt (@opts) {
# return true
return 1 if (defined($var) && defined($opt) && $var eq $opt);
}
# return false
return 0;
}
¿Qué quiere decir con * índice 0 *? –
¿Has leído la respuesta aceptada a la pregunta que vinculó? Especialmente la parte que dice que Perl * no * tiene un tipo de enumeración? Si es así, ¿de dónde esperas que aparezca el "índice 0"? – friedo
@friedo Estoy de acuerdo contigo, solo quiero asegurarme de entender esto bien. Necesito tener la opción de establecer HOME pero devolver 0. ¿Cambiaría simplemente el valor a 0? Ver Editar –