perl6-分配给参数

问题描述 投票:8回答:2

是否可以对形式参数进行赋值?

类似:

sub myfunc($n) {
    $n = $n + 5;
    return $n;
}

或者,我是否必须创建一个新变量并将$ n的值分配给它?

parameters subroutine perl6
2个回答
8
投票

您可以在参数上使用is copy特性:

sub myfunc($n is copy) {
    $n = $n + 5;
    return $n;
}

请参阅https://docs.raku.org/type/Signature#index-entry-trait_is_copy以获取更多信息。


3
投票

作为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;
}
© www.soinside.com 2019 - 2024. All rights reserved.