class Foo {
has &.bar;
has @.quux is required;
method clone { nextwith :quux(@!quux.clone) };
# as per <https://docs.perl6.org/type/Mu#method_clone>
};
my $f = Foo.new(quux => []);
my $f-clone = $f.clone(bar => sub { die });
# Foo.new(bar => Callable, quux => [])
Run Code Online (Sandbox Code Playgroud)
但应该是
Foo.new(bar => sub { #`(Sub|94789546929784) ... }, quux => [])
Run Code Online (Sandbox Code Playgroud)
添加:bar(&!bar.clone)到nextwith呼叫没有帮助.
nextwith"使用用户提供的参数调用下一个匹配的候选者".你只是:quux在nextwith通话中传递一个参数.
除非您添加显式的slurpy哈希参数(例如*%foo),否则所有方法都*%_在其签名中隐含:
say .signature given method ($a, $b) {} # (Mu: $a, $b, *%_)
Run Code Online (Sandbox Code Playgroud)
因此,默认情况下,所有命名参数都会被插入%_.一个常见的习惯是传递这些:
method clone { nextwith :quux(@!quux.clone), |%_ }
Run Code Online (Sandbox Code Playgroud)
上述将通过提供给参数$f.clone呼叫到nextwith"d clone呼叫.
添加
:bar(&!bar.clone)到nextwith呼叫没有帮助.
这将取代通话中:bar传递的参数$f.clone.在&!bar原始对象中包含的Callable对象类型.
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |