-3

Patient名前などがあるアプリを作りました。

class Patient
 attr_accessor :vorName

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

2 人の患者を作成しました。

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

vornameすべての患者を取得する方法がわかりません。私はこのようなことを試しました:

 Patient.each do
puts vorname
end
4

4 に答える 4

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"
于 2013-07-13T11:22:28.903 に答える
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
于 2013-07-13T11:20:03.637 に答える
0

これを変える:

Patient.each do
  puts vorname
end

このため:

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

ワンライナーとしても機能します。

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

編集

プリティがコメントで言ったように、これはレールではありません(レールを使用している場合は、それが道です)。したがって、別の回答で彼が言ったように、普通のルビーでは ObjectSpace を使用する必要があります。

プレーンな Ruby で動作するようにするには、回答の my Patient.allforを置き換える必要があります。ObjectSpace.each_object(Patient)

于 2013-07-13T11:25:12.887 に答える