我正在创建一个类,它是一个智能Hash,它知道如果给定YAML文件名如何加载自己的值,然后对它们执行各种操作。除了第一步是惹我生气。鉴于此代码:
class Agent < Hash
def initialize
super
end
def load_from_file(filename)
if (File.file?(filename))
self = YAML.load_file(filename)
end
end
end
...错误信息是一个“无法改变自我的价值”
如何制作从文件中加载自身的哈希?
答案 0 :(得分:1)
你非常接近。您只想使用Hash#replace:
,而不是自我分配class Agent < Hash
def initialize
super
end
def load_from_file(filename)
if (File.file?(filename))
replace YAML.load_file(filename)
end
end
end
#replace
用它们的键和传递的哈希值替换调用哈希的键和值 - 在这种情况下正是你想要的。但是,请确保在致电Hash
之前验证YAML数据确实是#replace
。