perl传递对象方法引用作为函数的参数

时间:2017-11-02 14:35:04

标签: perl methods

我试图做这样的事情:

- 源文件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

任何想法如何将对象的方法作为参数传递给可以在函数中使用的函数?

1 个答案:

答案 0 :(得分:6)

Perl没有绑定方法引用的概念。如果方法存在,my $enqueue = $object->can('method')将返回代码引用,但代码引用不绑定到该特定对象 - 您仍需要将其作为第一个参数($queue->$enqueue($item)或{ {1}})。

要传递绑定方法,正确的解决方案是使用包装方法调用的匿名子:

$enqueue->($queue, $item)