在 Ruby 中封送对象之前修改对象

Modify an object before marshaling it in Ruby

我有一个包含我想要编组的敏感数据的对象(使用 Marshal没有 敏感数据。

我想说:

def _dump(*args)
  # Clean-up sensitive data
  super
end

但这会产生 'no superclass method' 错误。有没有一种方法可以让我的对象按照我想要的方式响应 Marshal.dump,同时使用默认实现?

我希望 Marshal.dump(my_obj) 开箱即用,不需要 API 消费者记住调用不同的方法。

可能是_dump没有超类方法。如果它是在你的对象上定义的,它就会被调用。如果不是,则使用默认处理程序。

您可能想要 clone 您的对象并删除敏感字段,将其作为散列返回到 _dump 函数中,然后在 _load 方法中撤消它。

您还可以阅读 the documentation on Marshal,其中描述了推荐的方法。