ruby - Ruby 中是否有类似于 Pascal 记录的数据结构?

标签 ruby xml class record pascal

Ruby中有没有类似于Pascal记录的数据结构?

我想定义一个记录类型,它有大约15-20个字段,它们都是字符串。

我尝试为此目的定义一个类,但我意识到我必须定义 getter 和 setter 方法:

class Data
   def description
        @description
   end

   def size
        @size
   end

   def address
        @address
   end

   .
   .  all other (about 15 variables...)
   . 

   def description=( value )
        @description = value
   end

   def size=(value)
        @size=value
   end

   def address=(value)
        @address=value
   end
  .
  . more setter method (about 15 times...)
  .

end

以这种方式定义所有 15-20 个字段和 getter/setter 是相当烦人的。有没有更短的方法来做到这一点?例如:

class Data
 desc, size, address=""
end

或者类似的东西,然后我就可以创建 Data 类的新实例:

d=Data.new

然后设置实例变量:

d.desc="bla"
d.size="50.66"
d.address="Bla street 20."

我已经有一个方法,可以使用 XMLSimple gem 解析 XML 文件,并且我想从解析的数据创建一个记录(或类),并使用“return”关键字将其返回。然后我想简单地访问记录的字段:d.size、d.address、d.description 等等。例如:

def data_import(fname="1.xml")
  data = XmlSimple.xml_in(fname,{'SuppressEmpty' => ""})
  d=Data.new()
  d.desc=data['desc'][0]
  d.size=data['size'][0]
  d.address=data['address'][0]
  d. ... =
  d. ... =  (about 15-20 times)
  d. ... =
  return d
end

我的 XML (1.xml):

<entity>
 <desc>bla</desc>
 <size>50.66</size>
 <address>Bla street 20.</address>
 .
 . (15-20 more fields)
 .
</entity>

在 Pascal 语言中(据我所知,在 C++ 中)有一个用于此目的的称为“记录”的数据结构。

最佳答案

您可以使用Hash作为属性/属性的存储桶,或者您可以利用 Ruby 的元编程功能使用 accessors 生成 getter 和 setter像这样:

attr_accessor :desc, :size, :address

您还可以收集数组中的属性,并使用像这样的展开来将数组展开到前面提到的方法所需的列表中:

attributes = [:desc, :size, :address]
attr_accessor *attributes

关于ruby - Ruby 中是否有类似于 Pascal 记录的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12349054/

相关文章:

ruby - Ruby 的停用词列表

ruby - 无需 eval 即时创建 Ruby 类

python - Django - 使用字符串从查询集中调用属性

ruby-on-rails - "Command Prompt with Ruby on Rails"从哪里来,为什么它不断创建 "sites"文件夹?

ruby-on-rails - Heroku ruby​​ on rails 资源部署问题

android - android中的边距和布局

xml - 在 Scala 中编写非自结束标签 XML

mysql - 国家列表的最佳实践(SQL、XML、...)

css - 仅在表格内设置类样式

c++ - Friend 函数,期望 Primary Expression before 。 token