加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl中的 – >和::有什么区别

发布时间:2020-12-15 21:17:18 所属栏目:大数据 来源:网络整理
导读:::和 – 之间的确切区别是什么?在Perl? – 有时工作在::不。 解决方法 ::有两个用途。 它是包名称中的命名空间分隔符 use Foo::Bar; # Load Foo/Bar.pm$Foo::Bar::var # $var in namespace Foo::Bar 附加到一个裸字,它创建一个字符串文字[1]。 以下内容与
::和 – >之间的确切区别是什么?在Perl?

– >有时工作在::不。

解决方法

::有两个用途。

>它是包名称中的命名空间分隔符

use Foo::Bar;    # Load Foo/Bar.pm
$Foo::Bar::var   # $var in namespace Foo::Bar

>附加到一个裸字,它创建一个字符串文字[1]。

以下内容与’hello’相同,只是如果包hello不存在则会发出警告:

hello::

– >有两个用途。

>它用于解除引用。

$array_ref->[$i]
$hash_ref->{$k}
$code_ref->(@args)

>它在方法调用中用于表示调用者。

CGI->new()        # Static method call
$cgi->param()     # Object method call

你可能会问它们之间有什么区别

Foo::Bar::mysub()

Foo::Bar->mysub()

前者是函数调用。后者是方法调用。方法调用就像一个函数调用,有两个不同之处:

>方法调用使用继承。
>方法调用将调用者( – >的左侧)作为其第一个参数传递给子。

{
   package Foo::Baz;
   sub new {
      my ($class,$arg) = @_;
      my $self = bless({},$class);
      $self->{arg} = $arg;
      return $self;
   }

   sub mysub1 {
      my ($self) = @_;
      print($self->{arg},"n");
   }
}

{
   package Foo::Bar;
   our @ISA = 'Foo::Baz'; 
   sub mysub2 {
      my ($self) = @_;
      print(uc($self->{arg}),"n");
   }
}

my $o = Foo::Bar->new('hi');  # Same as: my $o = Foo::Baz::new('Foo::Bar','hi');
$o->mysub1();                 # Same as: Foo::Baz::mysub1($o);
$o->mysub2();                 # Same as: Foo::Bar::mysub2($o);

笔记

> Foo->方法欺骗性地调用名为Foo的子(如果它存在)(使用它作为调用者返回的值)。 Foo :: – >方法,意思是’Foo’ – >方法,不是。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读