【问题标题】:Creating an array within a Ruby object class在 Ruby 对象类中创建数组
【发布时间】:2012-07-10 09:14:46
【问题描述】:

我只想编写一个 Ruby 脚本(没有 rails),其中的类包含一个 id 数组。这是我原来的课程:

# define a "Person" class to represent the three expected columns
class Person <

  # a Person has a first name, last name, and city
  Struct.new(:first_name, :last_name, :city)

  # a method to print out a csv record for the current Person.
  # note that you can easily re-arrange columns here, if desired.
  # also note that this method compensates for blank fields.
  def print_csv_record
    last_name.length==0 ? printf(",") : printf("\"%s\",", last_name)
    first_name.length==0 ? printf(",") : printf("\"%s\",", first_name)
    city.length==0 ? printf("") : printf("\"%s\"", city)
    printf("\n")
  end
end

现在我想在类中添加一个名为 ids 的数组,我可以将它包含在 Struct.new 语句中,如 Struct.new(:first_name, :last_name, :city, :ids = Array.new) 或创建一个实例数组变量或任何定义单独的方法或其他东西?

然后我希望能够执行以下操作:

p = Person.new
p.last_name = "Jim"
p.first_name = "Plucket"
p.city = "San Diego"

#now add things to the array in the object
p.ids.push("1")
p.ids.push("55")

并遍历数组

p.ids.each do |i|
  puts i
end

【问题讨论】:

  • 你真的应该使用printputs,而不是printf

标签: ruby arrays class object struct


【解决方案1】:
# define a "Person" class to represent the three expected columns
class Person
 attr_accessor :first_name,:last_name,:city ,:ids
#  Struct.new(:first_name, :last_name, :city ,:ids) #used attr_accessor instead  can be used this too 

def initialize
     self.ids = [] # on object creation initialize this to an array
end
  # a method to print out a csv record for the current Person.
  # note that you can easily re-arrange columns here, if desired.
  # also note that this method compensates for blank fields.
  def print_csv_record
    print last_name.empty? ? "," : "\"#{last_name}\","
    print first_name.empty? ? "," : "\"#{first_name}\","
    print city.empty? ? "" : "\"#{city}\","
    p "\n"
  end
end

p = Person.new
p.last_name = ""
p.first_name = "Plucket"
p.city = "San Diego"

#now add things to the array in the object
p.ids.push("1")
p.ids.push("55")

#iterate
p.ids.each do |i|
  puts i
end

【讨论】:

    【解决方案2】:

    假设我了解您想要什么,就这么简单。将此添加到您的 Person 课程中:

    def initialize(*)
      super
      self.ids = []
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-26
      • 1970-01-01
      • 1970-01-01
      • 2016-08-31
      相关资源
      最近更新 更多