gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:55:25 24 4
gpt4 key购买 nike

我正在尝试做这样的事情:

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

...

首先,我无法将“bless”添加到 Thread::Queue

我尝试了一些在 stackoverflow 中找到的建议:

my $enqueueRef = $queue->can('enqueue');
MyModules::populateQueue(\&enqueueRef); <--- fails in the package at line

$enqueue->($item) 带有未定义的子程序

MyModules::populateQueue(\&queue->enqueue) <-- same failure as above

知道如何将一个对象的方法作为参数传递给一个可以在函数中使用的函数吗?

最佳答案

Perl 没有绑定(bind)方法引用的概念。 my $enqueue = $object->can('method') 将返回一个代码引用到一个方法(如果它存在),但是代码引用没有绑定(bind)到那个特定的对象——你仍然需要将其作为第一个参数传递($queue->$enqueue($item)$enqueue->($queue, $item))。

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

populate_queue(sub { $queue->enqueue(@_) });

关于perl 将对象方法引用作为参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47077879/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com