- 源文件1
my $queue = Thread::Queue->new();
MyModules::populateQueue(<pass $queue->enqueue method reference);
...
- 包文件
package MyModules
sub populateQueue {
my $enqueue = $_[0];
my $item = <find item to add to queue>;
$enqueue->($item);
...
首先,我无法向Thread :: Queue
添加“祝福”我尝试过在stackoverflow中找到的一些建议:
my $enqueueRef = $queue->can('enqueue');
MyModules::populateQueue(\&enqueueRef); <--- fails in the package at line
带有未定义子例程的$ enqueue-&gt;($ item)
MyModules::populateQueue(\&queue->enqueue) <-- same failure as above
任何想法如何将对象的方法作为参数传递给可以在函数中使用的函数?
答案 0 :(得分:6)
Perl没有绑定方法引用的概念。如果方法存在,my $enqueue = $object->can('method')
将返回代码引用,但代码引用不绑定到该特定对象 - 您仍需要将其作为第一个参数($queue->$enqueue($item)
或{ {1}})。
要传递绑定方法,正确的解决方案是使用包装方法调用的匿名子:
$enqueue->($queue, $item)