我们将看到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; # 12342
在perl 6中定义数组时,将创建一个新的列阵对象和绑定它以词法垫中的那个名字输入条目。因此:
# Perl 6my @foo = 1,2,3;push @foo, 42;.say for @foo; # 12342
在功能上与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)
当然,这不是唯一可以实现的方法;更多.
而不是必须绑定您的类来执行位置角色,有一种特殊的语法使用是特质。所以不必写:
新闻热点
疑难解答