依靠this answer,我写了下面的课程。使用它时,我收到一个错误:
'serialize'中的:未定义的方法'[] ='为nil:NilClass(NoMethodError)。
如何在基类中访问变量@serializable_attrs
?
基类:
# Provides an attribute serialization interface to subclasses.
class Serializable
@serializable_attrs = {}
def self.serialize(name, target=nil)
attr_accessor(name)
@serializable_attrs[name] = target
end
def initialize(opts)
opts.each do |attr, val|
instance_variable_set("@#{attr}", val)
end
end
def to_hash
result = {}
self.class.serializable_attrs.each do |attr, target|
if target != nil then
result[target] = instance_variable_get("@#{attr}")
end
end
return result
end
end
用法示例:
class AuthRequest < Serializable
serialize :company_id, 'companyId'
serialize :private_key, 'privateKey'
end
答案 0 :(得分:1)
类实例变量不是继承的,所以行
@serializable_attrs = {}
仅在Serializable
中设置它而不是它的子类。虽然您可以使用继承的钩子在子类化上设置它,或者更改serialize
方法以初始化@serializable_attrs
我可能会添加
def self.serializable_attrs
@serializable_attrs ||= {}
end
然后使用它而不是直接引用实例变量。