首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >你能克隆一个Perl 6进程吗?

你能克隆一个Perl 6进程吗?
EN

Stack Overflow用户
提问于 2018-04-27 02:55:22
回答 1查看 135关注 0票数 9

我在2018.01中使用了这个:

代码语言:javascript
复制
my $proc = Proc.new: :out;
my $f = $proc.clone;
$f.spawn: 'ls';
put $f.out.slurp;

它说它做不到。奇怪的是,错误消息是关于我没有使用的一个例程和一个不同的类:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2018-04-27 06:08:57

所有内容都继承了Mu的默认clone方法,该方法执行浅层克隆,但这并不意味着克隆所有内容都有意义。这尤其适用于可能包含对OS级对象的引用的对象,例如ProcIO::Handle。作为设计Proc::Async的人,我可以肯定地说,让它在clone上做任何有用的事情都不是一个设计考虑因素。我没有设计Proc,但我怀疑这同样适用。

至于错误,请记住,Perl6标准库是用Perl6实现的(非常类似于Java和.Net,但不像Perl5,后者默认提供的许多内容都直接转到用C编写的内容中)。在这个特殊的例子中,Proc是用Proc::Async实现的。Rakudo试图在一定程度上修剪堆栈跟踪,以消除设置中的调用,这通常对语言用户来说是一种胜利,但在这种情况下,可能会有一点帮助。使用--ll-exception标志运行Rakudo可以提供完整的细节,因此可以更清楚地了解所发生的事情。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50050146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档