首页 > 编程 > Perl > 正文

Perl5和Perl6对比使用Sigils的差别

2020-06-04 20:33:44
字体:
来源:转载
供稿:网友

我们将看到Sigls(变量名称开头处的符号)Perl 5和Perl 6之间的差别。

概述

让我们从Perl 5和Perl 6中的Sigils概述开始:

符号 Perl5 Perl6
@   Array  Positional
%   Hash  Associative
Subroutine  Callable
Scalar  Item
Typeglob N/a

@(Array vs. Positional)

在perl 5中定义数组时,可以创建一个可扩展的标量值列表,并给它一个带有sigil的名称。@:

# Perl 5my @foo = (1,2,3);push @foo, 42;say for @foo; # 1␤2␤3␤42␤

在perl 6中定义数组时,将创建一个新的列阵对象和绑定它以词法垫中的那个名字输入条目。因此:

# Perl 6my @foo = 1,2,3;push @foo, 42;.say for @foo; # 1␤2␤3␤42␤

在功能上与Perl 5中相同。然而,第一行是用于:

# Perl 6my @foo := Array.new( 1,2,3 );

这将绑定(而不是赋值)一个新的列阵对象指向词汇定义的名称。@foo。这,这个,那,那个@perl 6中的sigil表示一个类型约束:如果您想用该sigil将某个东西绑定到lexpad条目中,则它必执行位置角色。要确定一个类是否使用SmartMatch执行某个角色并不困难:

# Perl 6say Array ~~ Positional; # True

您可以认为perl 6中的所有数组都是以与绑定阵列在Perl 5中实现。而这也离事实不远。如果不深入细节,一个简单的例子可能会澄清这一点。这,这个,那,那个at-POS方法是实现位置角色。每当需要访问单个元素时,都会调用此方法。所以,当你写:

say @a[42]

你正在执行:

say @a.AT-POS(42)

当然,这不是唯一可以实现的方法;更多.

而不是必须绑定您的类来执行位置角色,有一种特殊的语法使用是特质。所以不必写:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表