我在项目中使用 Struct 而不是简单的 Hash 来为键值对集合提供语义名称。然而,一旦我构建了结构,我需要输出一个哈希值。我在 Ruby 1.9.3 中。例子:
MyMeaninfulName = Struct.new(:alpha, :beta, :gamma) do
def to_hash
self.members.inject({}) {|h,m| h[m] = self[m]; h}
end
end
my_var = MyMeaningfulName.new
my_var.to_hash # -> { :alpha=>nil, :beta=>nil, :gamma=>nil }
Struct 不包含 to_hash 方法是否有原因?这似乎很自然,但也许有一个根本原因不包括在内。
其次,是否有一种更优雅的方法可以将通用 to_hash 方法构建到 Struct 中(通常是通过猴子补丁,或者通过模块或继承)。