太空船运营商什么时候在外面使用?

Pis*_*tol 9 sorting perl operators spaceship-operator

这是一个最佳实践问题.

我只见过数字排序例程中使用的Perl太空飞船运算符(<=>).但它在其他情况下似乎很有用.我只是想不出实际用途.

任何人都可以举例说明它何时可以在Perl排序之外使用?

P S*_*ved 7

我正在为机器人乔编写一个控制系统,想要去机器人玛丽并给她充电.它们沿着线上的整数点移动.Joe从$ j开始,每个时间单位可以向任何方向行走1米.玛丽仍站在$ m,无法动弹 - 她需要充好的充电!控制程序看起来像这样:

while ($m != $j) {
    $j += ($m <=> $j);
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*man 5

<=>运营商将是一个有用的二进制搜索算法.大多数编程语言都没有进行三向比较的运算符,这使得每次迭代需要进行两次比较.有了<=>你可以做只有一个.

sub binary_search {
    my $value = shift;
    my $array = shift;
    my $low   = 0;
    my $high  = $#$array;

    while ($low <= $high) {
        my $mid = $low + int(($high - $low) / 2);

        given ($array->[$mid] <=> $value) {
            when (-1) { $low  = $mid + 1 }
            when ( 1) { $high = $mid - 1 }
            when ( 0) { return $mid      }
        }
    }

    return;
}
Run Code Online (Sandbox Code Playgroud)