首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Perl模块中编写函数引用?

如何在Perl模块中编写函数引用?
EN

Stack Overflow用户
提问于 2010-02-05 00:58:40
回答 3查看 15.6K关注 0票数 10

我正在尝试弄清楚如何使函数引用适用于Perl模块。我知道在模块外怎么做,但是在模块里面呢?考虑如下代码:

代码语言:javascript
运行
复制
==mymodule.pm==
1 sub foo { my $self = shift; ... }
2 sub bar { my $self = shift; ... }
3 sub zip {
4   my $self = shift;
5   my $ref = \&foo;
6   $self->&$foo(); # what syntax is appropriate?
7 }
==eof===

看看上面的5-6行。(1)首先定义函数引用,(2)取消引用,正确的语法是什么?

EN

回答 3

Stack Overflow用户

发布于 2010-02-05 01:06:07

TMTOWTDI

定义函数引用的

代码语言:javascript
运行
复制
$ref = \&subroutine;
$ref = sub { BLOCK };
$ref = "subroutineName"; # or $ref = $scalarSubroutineName

Dereferencing:

代码语言:javascript
运行
复制
$ref->(@args);
&$ref;  
&{$ref}(@args);
票数 25
EN

Stack Overflow用户

发布于 2010-02-05 01:06:04

如果$ref是一个方法(期望$self作为第一个参数),并且您希望在$self上调用它,则语法为:

代码语言:javascript
运行
复制
$self->$ref(@args)
票数 9
EN

Stack Overflow用户

发布于 2010-02-05 01:06:37

使用以下内容:

代码语言:javascript
运行
复制
$self->$ref();

使用这种语法,$ref可以是对子例程的引用,甚至可以是具有要调用的方法的名称的字符串,例如,

代码语言:javascript
运行
复制
my $ref = "foo";
$self->$ref();

请注意,这两者在继承方面的语义略有不同。

当不传递显式参数时,括号是可选的:

代码语言:javascript
运行
复制
$self->$ref;  # also flies

否则,使用

代码语言:javascript
运行
复制
$self->$ref($arg1, \%arg2, @others);
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2201552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档