【发布时间】:2018-03-18 21:38:31
【问题描述】:
有没有办法对形式参数进行赋值?
类似:
sub myfunc($n) {
$n = $n + 5;
return $n;
}
或者,我是否必须创建一个新变量并将 $n 的值分配给它?
【问题讨论】:
标签: parameters subroutine raku
有没有办法对形式参数进行赋值?
类似:
sub myfunc($n) {
$n = $n + 5;
return $n;
}
或者,我是否必须创建一个新变量并将 $n 的值分配给它?
【问题讨论】:
标签: parameters subroutine raku
您可以在参数上使用is copy trait:
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;
}
【讨论】: