在加载使用YAML序列化的对象时调用初始化

Bri*_*ung 6 ruby yaml

在使用YAML.load_file时是否可以强制Ruby调用initialize方法?我想调用该方法,以便为我不序列化的实例变量提供值.我知道我可以将代码分解为一个单独的方法,并在调用YAML.load_file之后调用该方法,但我想知道是否有更优雅的方法来处理这个问题.

par*_*tic 3

我认为你不能。由于您将添加的代码确实特定于要反序列化的类,因此您应该考虑在类中添加该功能。例如,假设Foo您要反序列化的类,您可以添加一个类方法,例如:

class Foo
  def self.from_yaml( yaml )
    foo = YAML::load( yaml )
    # edit the foo object here
    foo
  end
end

myFoo = Foo.from_yaml( "myFoo.yaml" )
Run Code Online (Sandbox Code Playgroud)