前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >perl '->' 和 '::' 的区别 | 方法和函数的区别

perl '->' 和 '::' 的区别 | 方法和函数的区别

作者头像
宋天伦
发布2023-10-20 13:04:40
2170
发布2023-10-20 13:04:40
举报
文章被收录于专栏:fryteafrytea

本文 首发于 🌱 煎茶,请注明 来源。

最近在看 PVE 源码时看到这样一段:

代码语言:javascript
复制
# old code uses PVE::RPCEnvironment::get(); 使用冒号表示调用函数
# new code should use PVE::RPCEnvironment->get(); 使用箭头表示法调用方法
sub get {
    return PVE::RESTEnvironment->get();
}

好奇两种调用方式是什么区别,经过研究,我在这篇文章1找到答案,两者差异在于:

  • 使用 冒号 表示 调用函数
  • 使用 箭头 表示 调用方法

以下是引用翻译:

我们知道在 Perl 中,Function 和 Subroutine 这两个名称是可以互换的。但是函数和方法的区别到底是什么呢?

表面上没有什么不同。它们都是使用 sub 关键字声明的。差异主要在于它们的使用方式。

总是使用箭头表示法调用方法。对象: p->do_something(

函数总是直接调用: 使用它的完全限定名: Module::Name::func_something(param) ,或者,如果函数是当前名称空间的一部分,则使用短名: func_something( param) 。

如果在调用它的对象的类中找不到方法, Perl 将转到父类并在那里寻找具有相同名称的方法。它将使用其内置的方法解析算法递归地执行它。如果根本找不到该方法,则它将放弃(或调用 AUTOLOAD )。另一方面, Perl 将只在单个位置查找函数(如果可用,则为 AUTOLOAD )。

方法总是将当前对象(或类名)作为其调用的第一个参数。函数永远不会得到对象。(除非您手动将其作为参数传递。)因此,方法通常作用于实例(对象) ,有时作用于整个类(然后我们称之为 class-method )。另一方面,函数从不作用于对象。尽管它可能会对班级产生影响。

  1. Methods, Functions and Subroutines in Perl and what is $self ? ↩︎

注:本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档