Perl6运算符问题

jon*_*han 6 operators perl6 raku

我看着傻/可爱/精彩的"睡眠排序",似乎起源于4chan.要对一组int进行排序,这个想法是粗略的

    
    foreach elt in @array
        spawn thread(elt)

thread(n)的作用

    sleep n
    print n

所以较小的值会更早地打印出来.

有一个Perl6实现

@foo = @foo>>.&sleep;

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

有谁能解释一下?

谢谢

mor*_*itz 10

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

但是,无论谁想出这个"实施",三个账户都是错误的:

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