Perl6运算符问题

时间:2011-06-22 20:04:40

标签: operators perl6

我看着傻/可爱/辉煌"sleep sort" that seems to have originated over at 4chan。要对一组int进行排序,这个想法大致是

    
    foreach elt in @array
        spawn thread(elt)

其中thread(n)执行

    sleep n
    print n

因此较早的值会被打印出来。

有一个Perl6实现

@foo = @foo>>.&sleep;

我得到 >> '超级'运算符,并且这假设超级自动并行化。但是.&让我困惑。

任何人都能解释一下吗?

感谢

1 个答案:

答案 0 :(得分:9)

如果你有一个函数yourfunc,那么你可以使用&符号&yourfunc获取对它的引用。语法$obj.$function只使用一个参数$function调用$obj。所以人们也可以写$function($obj) - 除了这种语法不允许使用超文本。

但是,无论谁提出这个“实施”,三个账户都是错误的:

  • 超级运算符允许编译器生成多个线程来执行每个方法,它不必一次为所有这些线程生成一个线程 - 所以“随机排序”无法工作
  • 超级运算符可以随机化方法的执行顺序,但它必须保留顺序或返回的项目 - 所以@foo根本不会被排序,即使第一点不适用
  • sleep()应该返回睡眠的秒数,而不是参数。如果有人在计算过程中将计算机设置为休眠状态,则结果可能会高得多。