获取课程的所有条目

时间:2013-07-13 11:15:34

标签: ruby

我创建了一个Patient有名称等的应用程序。

class Patient
 attr_accessor :vorName

 def initialize (vorname, name, alter)
@vorname = vorname
@name = NameName
@alter = alterr
end

我创造了两名患者:

a = Patient.new('jonas', 'leiti', '25.02.95')
b = Patient.new('emanuel','stadler', '59.09.91')

我不知道如何得到所有患者的vorname。我试过这样的事情:

 Patient.each do
puts vorname
end

4 个答案:

答案 0 :(得分:2)

看看这个方法 - ObjectSpace#each_object

class Patient
 attr_accessor :vorname

 def initialize (vorname, name, alter)
  @vorname = vorname
  @name = name
  @alter = alter
 end 
end 

a = Patient.new('jonas', 'leiti', '25.02.95') 
b = Patient.new('emanuel','stadler', '59.09.91')

ObjectSpace.each_object(Patient) {|x| p x.vorname }
# >> "emanuel"
# >> "jonas"

答案 1 :(得分:2)

真正的重点是:为什么不在创建时存储它们的数组?而不是:

a = Patient.new('jonas', 'leiti', '25.02.95') 
b = Patient.new('emanuel','stadler', '59.09.91')

做的:

arr = []
arr << Patient.new('jonas', 'leiti', '25.02.95')
arr << Patient.new('emanuel','stadler', '59.09.91')

然后您可以使用以下方式访问它们:

arr.each do |x|
    puts x.vorname
end

一个好的经验法则是:

  

除非绝对必要,否则不要使用反射/内省。

肯定不是这样。

注意:attr_accessor :vorName应为attr_accessor :vorname

答案 2 :(得分:0)

您的代码包含一些拼写错误。我编辑了你的代码如下。

class Patient
  attr_accessor :vorname

  @@patients = []

  def self.patients
    @@patients
  end

  def initialize (vorname, name, alter)
    @vorname = vorname
    @name = name
    @alter = alter
    @@patients.push self
  end
end


a = Patient.new('jonas', 'leiti', '25.02.95')
b = Patient.new('emanuel','stadler', '59.09.91')

Patient.patients.each do |patient|
  puts "vorname: #{patient.vorname}"
end

答案 3 :(得分:0)

改变这个:

Patient.each do
  puts vorname
end

为此:

Patient.all.each do |patient|
  puts patient.vorname
end

它也可以作为oneliner:

Patient.all.each{|patient| puts patient.vorname}

修改

正如Priti在评论中说的那样,这是没有轨道(我的不好,如果你使用的是导轨,那么就是这样),所以在普通红宝石中,你需要使用ObjectSpace在另一个答案中说。

您应该在我的回答中将Patient.all替换为ObjectSpace.each_object(Patient)以使用纯Ruby工作。