您能想到Perl 6的交叉点有什么用途?

时间:2008-09-19 14:29:26

标签: perl

来自the Perl 6 Wikipedia entry

的更多信息

Perl 6引入了交叉点的概念:值是其他值的组合。[24]在Perl 6设计的早期阶段,这些被称为“叠加”,类似于量子叠加的量子物理学中的概念 - 波形可以同时占据几个状态直到观察“折叠”它们。 Damian Conway在2000年发布的一个名为Quantum :: Superpositions [25]的Perl 5模块提供了一个初步的概念证明。虽然起初,这种叠加价值似乎只是一种程序化的好奇心,但随着时间的推移,它们的实用性和直观性得到了广泛的认可,而且现在,路口在Perl 6的设计中占据了中心位置。

在最简单的形式中,通过将一组值与正则运算符组合来创建联结:

my $any_even_digit = 0|2|4|6|8; # any(0, 2, 4, 6, 8)
my $all_odd_digits = 1&3&5&7&9; # all(1, 3, 5, 7, 9)

|表示一个等于其左侧或右侧参数的值。 &安培;表示一个等于其左手和右手参数的值。这些值可以在任何使用正常值的代码中使用。在交叉点上执行的操作同等地作用于交叉点的所有成员,并根据junctive运算符进行组合。所以,(“苹果”|“香蕉”)〜“s”会产生“苹果”|“香蕉”。在比较中,交汇点返回单个true或false结果进行比较。如果对于结点的任何一个元素的比较为真,则“任何”结点返回true。如果对于交汇点的所有元素进行比较,则“all”交汇点返回true。

Junction还可以通过引入一种受限于类型连接点的通用编程风格来更丰富地扩充类型系统:

sub get_tint ( RGB_Color|CMYK_Color $color, num $opacity) { ... }
sub store_record (Record&Storable $rec) { ... }

3 个答案:

答案 0 :(得分:11)

某个月有多少天?

given( $month ){
  when any(qw'1 3 5 7 8 10 12') {
    $day = 31
  }
  when any(qw'4 6 9 11') {
    $day = 30
  }
  when 2 {
    $day = 29
  }
}

答案 1 :(得分:6)

结点最吸引人的特点是你不需要为复杂情况编写大量的代码测试。您描述了连接点的情况,然后应用测试。你没有考虑如何得到答案(例如,使用短路操作员或块),但你问的是什么问题。

答案 2 :(得分:5)

自动阅读听起来很酷,虽然我不知道它的当前状态是什么。

for all(@files) -> $file {
    do_something($file);
}

Junction没有顺序,因此VM可以为@files中的每个元素自由生成一个线程,并将它们全部并行处理。

相关问题