Ruby类中的命名空间方法

时间:2013-08-02 16:50:01

标签: ruby namespaces

我正在使用Ruby的元编程方法在类中创建一堆方法。在课程OmekaItem中,此表单dc_titledc_subject有许多方法,此表单itm_field1itm_field2有很多方法。我想更好地分组这些方法。理想情况下,给定一个名为item的类的实例,我想以这种方式调用方法:

  • item.dublin_core.title
  • item.item_type_metadata.field

等等。有没有办法做到这一点?

This question有我正在使用的代码。

1 个答案:

答案 0 :(得分:1)

以下内容适用于您?

class OmekaItem
  class DublinCore
    def initialize(omeka_item)
      @omeka_item = omeka_item
    end

    def title
      @omeka_item.dc_title
    end

    def subject
      @omeka_item.dc_subject
    end
  end

  class ItemTypeMetadata
    def initialize(omeka_item)
      @omeka_item = omeka_item
    end

    def field1
      @omeka_item.itm_field1
    end

    def field2
      @omeka_item.itm_field2
    end
  end

  def dublin_core
    @dublin_core ||= DublinCore.new(self)
  end

  def item_type_metadata
    @item_type_metadata ||= ItemTypeMetadata.new(self)
  end
end

DublinCoreItemTypeMetadata上的方法可以根据需要使用define_method动态生成。