Öznitelikleri belirli değerlerle eşleşen ilk nesneye ait benzer nesneler arasında arama yapmak için soyut bir kod yazmaya çalışıyorum. Bunu yapabilmek için, bir grup erişimci yöntemini çağırmalı ve tüm değerlerini tek tek kontrol etmeliyim. Böyle bir soyutlama kullanmak istiyorum:Perl'de, bir dizede sahip olduğum bir yöntemi nasıl arayabilirim?
sub verify_attribute {
my ($object, $attribute_method, $wanted_value) = @_;
if (call_method($object, $attribute_method) ~~ $wanted_value) {
return 1;
}
else {
return;
}
}
Sonra can tuşları erişimci yöntem isimleri ve değerleri ben bu özelliklerin arıyorum değerlerdir bir karma döngü. gelen esrar %wanted
denir Örneğin, ben istediğiniz nesneyi bulmak için böyle bir kod kullanabilirsiniz:
my $found_object;
FINDOBJ: foreach my $obj (@list_of_objects) {
foreach my $accessor (keys %wanted) {
next FINDOBJ unless verify_attribute($obj, $accessor, $wanted{$accessor});
}
# All attrs verified
$found_object = $obj;
last FINDOBJ;
}
, tek sorun call_method
exsit olmamasıdır. Yoksa öyle mi? Adını içeren bir dizem varsa nasıl bir yöntem arayabilirim? Yoksa bu sorunun tamamı için daha iyi bir çözüm var mı?
Ye ah, birkaç sanık önce bunu deneme yanılma ile çözdüm. Güzel. –
Sadece 'List :: AllUtils' kullanıyorum. Veya Util :: Any qw (: all) '. Ama örnek kodumda çekirdeğe yapışmaya çalışıyorum. –
Bunun işe yaraması için, sıkı kontrolleri “katı değil” (mutlaka küresel olarak değil) ile devre dışı bırakmanız gerektiğine inanıyorum - doğru mu? –