我在2018.01中使用了这个:
my $proc = Proc.new: :out;
my $f = $proc.clone;
$f.spawn: 'ls';
put $f.out.slurp;它说它做不到。奇怪的是,错误消息是关于我没有使用的一个例程和一个不同的类:
Cannot resolve caller stdout(Proc::Async: :bin); none of these signatures match:
(Proc::Async:D $: :$bin!, *%_)
(Proc::Async:D $: :$enc, :$translate-nl, *%_)
in block <unit> at proc-out.p6 line 3发布于 2018-04-27 06:08:57
所有内容都继承了Mu的默认clone方法,该方法执行浅层克隆,但这并不意味着克隆所有内容都有意义。这尤其适用于可能包含对OS级对象的引用的对象,例如Proc或IO::Handle。作为设计Proc::Async的人,我可以肯定地说,让它在clone上做任何有用的事情都不是一个设计考虑因素。我没有设计Proc,但我怀疑这同样适用。
至于错误,请记住,Perl6标准库是用Perl6实现的(非常类似于Java和.Net,但不像Perl5,后者默认提供的许多内容都直接转到用C编写的内容中)。在这个特殊的例子中,Proc是用Proc::Async实现的。Rakudo试图在一定程度上修剪堆栈跟踪,以消除设置中的调用,这通常对语言用户来说是一种胜利,但在这种情况下,可能会有一点帮助。使用--ll-exception标志运行Rakudo可以提供完整的细节,因此可以更清楚地了解所发生的事情。
https://stackoverflow.com/questions/50050146
复制相似问题