是否可以对形式参数进行赋值?
类似:
sub myfunc($n) {
$n = $n + 5;
return $n;
}
或者,我是否必须创建一个新变量并将$ n的值分配给它?
您可以在参数上使用is copy
特性:
sub myfunc($n is copy) {
$n = $n + 5;
return $n;
}
请参阅https://docs.raku.org/type/Signature#index-entry-trait_is_copy以获取更多信息。
作为mentioned by Elizabeth Mattijsen,您可能想使用is copy
。
但是,如果您确实打算对用作该函数参数的变量进行突变,则可以使用is rw
特性:
my $num = 3;
mutating-func($num);
say $num; # prints 8
sub mutating-func($n is rw) {
$n = $n + 5;
return $n;
}
但是如果您将不可变的对象(如数字而不是变量)传递给它,则会使您陷入错误:
# dies with "Parameter '$n' expected a writable container, but got Int value"
say mutating-func(5); # Error since you can't change a value
sub mutating-func($n is rw) {
$n = $n + 5;
return $n;
}