ruby – 向struct添加to_hash(或to_h)方法的优雅方法?
发布时间:2020-12-17 03:30:32 所属栏目:百科 来源:网络整理
导读:我在项目中使用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]
我在项目中使用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(通常,通过monkeypatching,或通过模块或继承). 解决方法
试试这个:
class Struct old_new = self.method(:new) def self.new(*args) obj = old_new.call(*args) obj.class_exec do def to_hash self.members.inject({}) {|h,m| h[m] = self[m]; h} end end return obj end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |