Muszę odrzucić wartość wyliczenia w perlu, jak mogę to zrobić?Jak utworzyć typ wyliczenia w Perlu?
ciągnąc z tego wątku: Does Perl have an enumeration type?
use strict;
use constant {
HOME => 'home',
WORK => 'work',
MOBILE => 'mobile',
};
my $phone_number->{type} = HOME;
print "Enum: ".$phone_number->{type}."\n";
ale nie powinien tego indeksu powrotną 0? czy rozumiem to źle?
EDIT:
Więc coś w tym być bardziej expectable dla typu enum?
use strict;
use constant {
HOME => 0,
WORK => 1,
MOBILE => 2,
};
my $phone_number->{type} = HOME;
print "Enum: ".$phone_number->{type}."\n";
EDIT # 2
Również chciałbym potwierdzić od wybranej opcji, ale przechodzą z powrotem Słowo, a następnie wartość. Jak mogę uzyskać najlepsze z obu przykładów?
@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;
}
Co masz na myśli przez * indeks 0 *? –
Czy przeczytałeś zaakceptowaną odpowiedź na pytanie, które łączysz? Zwłaszcza część, o której mówi Perl * nie * ma typ wyliczeniowy? Jeśli tak, to gdzie spodziewacie się "indeksu 0"? – friedo
@friedo Zgadzam się z tobą, chcę tylko upewnić się, że rozumiem to dobrze. Potrzebuję opcji ustawienia HOME, ale powrotu 0. Czy wystarczy zmienić wartość na 0? Zobacz Edycja –