gpt4 book ai didi

ruby - Ruby `exit!` 函数似乎调用了与文档相反的退出处理程序

转载 作者:行者123 更新时间:2023-12-02 16:30:08 25 4
gpt4 key购买 nike

以下代码在 Windows 上的 JRuby 9.1.17.0 和 9.2.13.0 上运行:

at_exit { puts "at_exit function" }
ObjectSpace.define_finalizer("string", proc { puts "in finalizer" })
exit!

产生这个:

at_exit function
in finalizer

我的期望是,根据 exit! 的文档,不应该调用退出处理程序: https://ruby-doc.org/core-2.7.1/Kernel.html#method-i-exit-21

这是 exit! 中的错误吗?

有没有其他方法可以实现不触发退出处理程序的预期结果,从而保证从内部杀死我的系统?

最佳答案

这看起来像是 JRuby 中已知的不兼容性。

Kernel#exit! 的规范和 Process::exit!仅添加到 ruby/spec 2020 年 7 月 27 日(35 天前),Benoit Daloze(ruby/spec 的维护者,TruffleRuby 的首席开发人员,JRuby 团队成员):https://github.com/ruby/spec/commit/3bf0edcecb424df1e3a70fe48971b24af4be1977#diff-5b2f13aa6d64a30812e9221d9994b907R95-R99

2020 年 7 月 28 日,Benoit 向 JRuby spec 目录添加了标签,将这些新规范禁用为已知故障:https://github.com/jruby/jruby/commit/f138bd9e62b757e6fd209101b2eb46b266b9b7b0#diff-332fe3279d2469ab891d8739c3d425e3R1-R2

JRuby 团队确实运行ruby/spec 以确保与所有其他 Ruby 实现的兼容性,但当然,如果缺少规范,不兼容性可能会被忽视。

关于ruby - Ruby `exit!` 函数似乎调用了与文档相反的退出处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63664574/

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