gpt4 book ai didi

signals - 如何在 `signal` block 中调用方法?

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

是否可以在信号块中调用用户定义的方法?

method my-method ( ... ) {
signal(SIGTERM,SIGINT,SIGQUIT,SIGHUP).tap( -> $sig {
say "Received signal: $sig";
self!restore-term();
exit;
} );
...
...
}

最佳答案

是的,但有一些警告。
signal提供 Supply事件,您可以tap (如果您愿意)但可能应该在 react whenever 中使用结构体。

在您的示例中, tap需要一个 Block ( lambda )。每次调用该方法时,都会设置另一个Supply (这可能不是您想要的)。

每当事件到达时都会调用此块。这意味着它是完全异步的并且没有上下文,除了创建块的词法上下文。

所以每当信号到达 Supply ,它将运行带有 self 的块目前该方法被调用。哪些可能不是您所期望的?

所以我觉得你问错了问题。显然你有一个你希望的对象(希望是哨兵)restore-term每当有人表示他们想要离开程序时调用的方法。因此,您最好将程序重组为以下内容:

my $sentinel = class.new(...);
react {
whenever signal(SIGTERM,SIGINT,SIGQUIT,SIGHUP) -> $sig {
say "Received signal: $sig";
$sentinel.restore-term();
exit;
}
# .... other stuff
}

关于signals - 如何在 `signal` block 中调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61298972/

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