gpt4 book ai didi

raku - 如何通过克隆填充 Callable 属性?

转载 作者:行者123 更新时间:2023-12-04 14:22:17 26 4
gpt4 key购买 nike

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 => [])

但应该是
Foo.new(bar => sub { #`(Sub|94789546929784) ... }, quux => [])

添加 :bar(&!bar.clone)nextwith打电话没有帮助。

最佳答案

nextwith “使用用户提供的参数调用下一个匹配的候选者”。你只是传递了一个 :quux nextwith 中的参数称呼。

除非您添加显式 slurpy 哈希参数(例如 *%foo ),否则所有方法都具有隐式 *%_在他们的签名中:

say .signature given method ($a, $b) {} # (Mu: $a, $b, *%_)

所以默认情况下,所有命名参数都被吞入 %_。 .一个常见的习惯用法是传递这些:
method clone { nextwith :quux(@!quux.clone), |%_ }

以上将传递提供给 $f.clone 的参数。调用 nextwith 'd clone称呼。

Adding :bar(&!bar.clone) to the nextwith call does not help.



这将代替 :bar$f.clone 中传递的参数称呼。 &!bar在原始对象中包含 Callable类型对象。

关于raku - 如何通过克隆填充 Callable 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54633260/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com