在Ruby中,我可以在Struct中使用Struct吗?

时间:2015-07-29 20:23:41

标签: ruby struct liquid

我想编写以下逻辑结构:

category
  name
  description
  fields

field
  name
  description 

我正在使用液滴。如果我有:

class FieldDrop < liquid::Drop
  def initialize(field)
    @field = field
  end
  def name
    @field.name
  end
  def description
    @field.description
  end
end

然后如何让CategoryDrop类在其def fields方法中引用FieldDrop?

我的结构是:

Category = Struct.new(:name, :description, :fields)

基于CategoryDrop

def fields
  @category.fields
end

我希望def fields扩展到每个字段的@ field.name +''+ @ field.description。

1 个答案:

答案 0 :(得分:1)

根据您的问题的命名和说明,听起来您想要Struct中的Struct的集合或列表,而不仅仅是Struct中的Struct }}

定义Category结构:

Struct.new('Category', :name, :description, :fields)
 => Struct::Category

定义Field结构:

Struct.new('Field', :name, :description)
 => Struct::Field

创建Category实例时,它可以有fields成员的数组,该数组最初可能为空:

@category = Struct::Category.new('Foo', 'This is a foo', Array.new)
=> #<struct Struct::Category name="Foo", description="This is a foo", fields=[]>

然后将一些字段添加到@category

@category.fields << [ 'Field 1', "This is field 1" ]
@category.fields << [ 'Field 2', 'This is field 2' ]
...

然后您的字段显示方法可能如下所示:

def fields
  @category.fields.each { |f| puts f.name + ' ' + f.description }
end

或者你想对这些领域做什么。