Ich habe eine Reihe von Feldern mit jedem Feld mit unterschiedlichen Satz von Validierungsregeln.Perl Unterroutine Referenz
Ich habe die Subroutinenreferenz für die Validierung eines Hash-Ref platziert.
Derzeit ist es in meinem Konstruktor, aber ich möchte es aus meinem Konstruktor in einem privaten Unter nehmen.
Ich habe es als getan unten
sub new {
my $class = shift;
my $self = {@_};
$class = (ref($class)) ? ref $class : $class;
bless($self, $class);
$self->{Validations} = {
Field1 => {name => sub{$self->checkField1(@_);},args => [qw(a b c)]}
Field2 => {name => sub{$self->checkField2(@_);},args => {key1, val1}}
..
..
..
..
};
return $self;
}
Jetzt möchte ich alle diese Validierungsregeln aus meinem Konstruktor herausnehmen und wollen wie unten etwas, was zu tun, so dass ich eine bessere Kontrolle über meine Validierung haben basierte Regeln auf Typen Felder aus. (Sprich einige Regeln in einer Reihe von Bereichen gemeinsam sind, und ich kann durch Überschreiben der Werte von Feldern. für andere Regeln nur Regeln überschreiben)
bless($self, $class);
$self->{Validations} = $self->_getValidation($self->{type});
return $self;
}
sub _getValidation{
my ($self,$type) = @_;
my $validation = {
Field1 => {name => sub {$self->checkField1(@_);}, args => {key1 => val1}},};
return $validation;
}
Aber ich bin immer Can't use string ("") as a subroutine ref while "strict refs" in use at...
kann mir jemand sagen, Warum ist dieses Verhalten mit? Subref. Wenn ich meinen Namensschlüssel überprüfe, wird er null oder sub {DUMMY};
Eine weitere Sache hier hinzufügen, ich habe es getan 'Field1 => {name => sub {$ self> checkField1 (@_);}' so muss ich irgendwann auch einzelne Felder validieren, und dachte daran, einzelne Feldregeln wie '$ obj-> checkField1 aufzurufen ('string', @ args); 'Wenn es einen besseren Weg gibt, bin ich bereit, meinen Ansatz zu ändern – awake416
Lustiges Ding ist hier passiert, es funktioniert ohne irgendein Problem, eigentlich habe ich die Keys definiert, die Field1 starten und das erste erzeugte Feld war Field0: - (... Aber diese Frage steht noch offen für einen besseren Ansatz. – awake416
Sind die Validierungen tatsächlich pro Objekt unterschiedlich, dass Sie sie in ein Attribut einfügen, oder machen Sie es nur, um '$ self' zu erfassen? Weil Sie nicht brauchen ... – hobbs