保存时忽略变量

如果由于某种原因,在序列化对象时要省略某些实例变量,可以通过定义名为 to_yaml_properties 的方法来实现。

在此方法的主体中,放置一个字符串数组。每个字符串应与要保存的实例变量的名称匹配。任何未指定的变量都不会被保存。看看这个示例:

limit_y.rb
  1. class Yclass
  2. def initialize(aNum, aStr, anArray)
  3. @num = aNum
  4. @str = aStr
  5. @arr = anArray
  6. end
  7. def to_yaml_properties
  8. ["@num", "@arr"] #<= @str will not be saved!
  9. end
  10. end

这里 to_yaml_properties 限制了当你调用 YAML.dump 时被保存的变量仅为 @num@arr。字符串变量 @str 将不会被保存。如果你以后希望根据保存的 YAML 数据重建对象,则你有义务确保“缺失”变量是不被需要的(在这种情况下可以忽略它们),或者如果需要,它们应该用一些有意义的值初始化:

  1. ob = Yclass.new( 100, "fred", [1,2,3] ) # ...creates object with @num=100, @str="fred", @arr=[1,2,3]
  2. yaml_ob = YAML.dump( ob ) #...dumps to YAML only the @num and @arr data (omits @str)
  3. ob2 = YAML.load( yaml_ob ) #...creates ob2 from dumped data with @num=100, @arr=[1,2,3] , but without @str