Marshal.dump无法转储包含单例(本征类)的类。我想看看这个方法如何决定这个单例的存在,但是我不知道如何找到这个源。我确实尝试了以下几点:
dump_method = Marshal.method(:dump) #=> #<Method: Marshal.dump>
dump_method.source_location # => nil
我还快速查看了https://github.com/ruby/ruby,但由于没有搜索功能,我不知道在哪里可以找到Marshal的源代码。
发布于 2018-12-06 04:58:29
检查是这里,但它是在C-和核磁共振代码是臭名昭著的不透明。
我相信一个类似的检查,但在Ruby中,应该是:
obj.singleton_class.instance_methods(false).empty? &&
obj.singleton_class.instance_variables.empty?
如果这是false
(也就是说,如果在单例上定义了任何内容),则不需要转储。
https://stackoverflow.com/questions/53644285
复制相似问题