我正在使用 Ruby 的元编程方法在一个类中创建一堆方法。类OmekaItem
中有一堆这种形式的方法dc_title
,dc_subject
还有一堆这种形式的itm_field1
方法itm_field2
。我想更好地对这些方法进行分组。理想情况下,给定一个名为 的类的实例item
,我想以这种方式调用这些方法:
item.dublin_core.title
item.item_type_metadata.field
等等。有没有办法做到这一点?
这个问题有我正在使用的代码。
我正在使用 Ruby 的元编程方法在一个类中创建一堆方法。类OmekaItem
中有一堆这种形式的方法dc_title
,dc_subject
还有一堆这种形式的itm_field1
方法itm_field2
。我想更好地对这些方法进行分组。理想情况下,给定一个名为 的类的实例item
,我想以这种方式调用这些方法:
item.dublin_core.title
item.item_type_metadata.field
等等。有没有办法做到这一点?
这个问题有我正在使用的代码。
以下内容对您有用吗?
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
方法 onDublinCore
并且ItemTypeMetadata
可以根据需要动态生成define_method
。