Rossetta コード (レーベンシュタイン距離の Perl 6 コード) では、サブルーチン シグネチャに が含まれていますStr $t --> Int
。
オペレーターは何かに-->
作用していますか、それともまったく別のものですか?$t
Rossetta コード (レーベンシュタイン距離の Perl 6 コード) では、サブルーチン シグネチャに が含まれていますStr $t --> Int
。
オペレーターは何かに-->
作用していますか、それともまったく別のものですか?$t
返品制約を指定します。
たとえば、次のコードでは、戻り値が整数である必要があります。
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;