【发布时间】:2011-02-12 17:42:42
【问题描述】:
我正在尝试编写一些抽象代码,用于在相似对象列表中搜索其属性与特定值匹配的第一个对象。为了做到这一点,我需要调用一堆访问器方法并一个一个地检查它们的所有值。我想使用这样的抽象:
sub verify_attribute {
my ($object, $attribute_method, $wanted_value) = @_;
if ( call_method($object, $attribute_method) ~~ $wanted_value ) {
return 1;
}
else {
return;
}
}
然后我可以遍历一个散列,其键是访问器方法名称,其值是我正在寻找这些属性的值。例如,如果该哈希被称为%wanted,我可能会使用这样的代码来查找我想要的对象:
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;
}
当然,唯一的问题是call_method 不存在。或者是吗?如果我有一个包含方法名称的字符串,如何调用方法?或者对整个问题有更好的解决方案吗?
【问题讨论】:
标签: perl string oop methods symbols