1

Rossetta コード (レーベンシュタイン距離の Perl 6 コード) では、サブルーチン シグネチャに が含まれていますStr $t --> Int

オペレーターは何かに-->作用していますか、それともまったく別のものですか?$t

4

1 に答える 1

3

返品制約を指定します。

たとえば、次のコードでは、戻り値が整数である必要があります。

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、エラーがスローされます。

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

戻り値の型を定義するより明確な方法は、次を使用することですreturns(Thanks Brad Gilbert ):

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

    return $result;
}

my $sum = add(5,6);
say $sum;
于 2015-03-31T17:38:12.613 に答える