perl6 - 参数赋值

perl6 - assignment to parameter

有没有办法对形式参数进行赋值?

类似于:

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

作为 你可能想使用 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;
}