0

考虑下面的例子

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取决于该实例的属性。那么如何在加载方法中获取此实例/资源(在源代码中引用)的上下文?loadloadname

如果问题还不清楚,请告诉我!

4

1 回答 1

0

您正试图打破封装。name和是不同的value属性,因此每个人都应该不知道对方的存在,更不用说价值了。

正确的解决方案是将“东西”移动到对这两个属性都具有可见性的对象上。这两个选项是:

  1. A班级(如user1376019建议的那样);或者
  2. 一个复杂的数据类型,例如NameAndValue < DataMapper::Property::Object,它封装了这两个属性。

如果您需要对单个属性执行聚合函数,则第二个选项将不起作用,除非您可以以某种方式覆盖复杂属性以具有多个字段。

在任何一种情况下,如果没有对它的引用,不能引用它。

于 2013-06-25T06:26:56.313 回答