Marshal.dump无法转储包含单例(本征类)的类。我想看看该方法如何确定此单例的存在,但我不知道如何找到源。我确实尝试了以下方法:
dump_method = Marshal.method(:dump) #=> #<Method: Marshal.dump>
dump_method.source_location # => nil
我也快速浏览了https://github.com/ruby/ruby,但是由于没有搜索功能,我不知道在哪里可以找到元帅的来源。
答案 0 :(得分:3)
检查是here,但是它是C语言-MRI代码非常不透明。
我相信与此类似的支票,但在Ruby中将是:
obj.singleton_class.instance_methods(false).empty? &&
obj.singleton_class.instance_variables.empty?
如果这是false
(即,如果在单例中定义了任何内容),那么您就没有转储。