考虑以下示例
module DataMapper
class Property
class CustomType < DataMapper::Property::Text
def load(value)
# do stuff and return formatted value
end
end
end
end
Class A
property :name, String
property :value, CustomType
end
现在,当A.first
或A.first.value
load
方法被执行时,我需要在load
内执行的计算取决于该实例的{{1}属性。那么如何在load方法中获取此实例/资源的上下文(如源代码中所述)?
如果问题不明确,请告诉我!
答案 0 :(得分:0)
您正试图打破封装。 name
和value
是不同的属性,因此每个属性都应该忽略对方的存在,更不用说价值了。
正确的解决方案是将“stuff”移动到对两个属性都具有可见性的对象。这两个选项是:
A
类(由user1376019建议);或NameAndValue < DataMapper::Property::Object
,它封装了两个属性。如果您需要对各个属性执行聚合函数,则第二个选项将不起作用,除非您可以以某种方式覆盖复杂属性以包含多个字段。
在任何一种情况下, value 都不能引用 name 而不引用它。