--> 在 Perl 6 中是什么意思?

What does --> mean in Perl 6?

在 Rossetta 代码中,the Perl 6 code for Levenshtein distance,子程序签名包含 Str $t --> Int

--> 是作用于 $t 的运算符还是其他东西?

指定一个return constraint.

例如,此代码要求 return 值为整数:

sub add (Int $inputA, Int $inputB --> Int)
{
    my $result = $inputA+$inputB;

    say $result;         # Oops, this is the last statement, so its return value is used for the subroutine
}

my $sum = add(5,6);

由于最后一个语句是 say 函数,因此它隐式地 return 是一个布尔值,因此它会抛出一个错误:

11
Type check failed for return value; expected 'Int' but got 'Bool'
  in any return_error at src/vm/moar/Perl6/Ops.nqp:649
  in sub add at test.p6:5
  in block <unit> at test.p6:8

当你得到这个错误时,你查看你的代码并意识到你应该包含一个明确的 return 语句并且可能在子例程之外打印结果:

sub add (Int $inputA, Int $inputB --> Int)
{
    my $result = $inputA+$inputB;

    return $result;
}

my $sum = add(5,6);
say $sum;

打印出预期的答案,没有任何错误:

11

定义 return 类型的更清晰的方法是使用 returns(感谢 ):

sub add (Int $inputA, Int $inputB) returns Int
{
    my $result = $inputA+$inputB;

    return $result;
}

my $sum = add(5,6);
say $sum;