web-dev-qa-db-ja.com

Ruby:配列を印刷してきれいにする方法

この質問が馬鹿げているかどうかはわかりませんが、それを行う方法が見つかりませんでした。

通常、配列をループに入れるにはこれを行います

current_humans = [.....]
current_humans.each do |characteristic|
  puts characteristic
end

ただし、これがある場合:

class Human
  attr_accessor:name,:country,:sex
  @@current_humans = []

  def self.current_humans
    @@current_humans
  end

  def self.print    
    #@@current_humans.each do |characteristic|
    #  puts characteristic
    #end
    return @@current_humans.to_s    
  end

  def initialize(name='',country='',sex='')
    @name    = name
    @country = country
    @sex     = sex

    @@current_humans << self #everytime it is save or initialize it save all the data into an array
    puts "A new human has been instantiated"
  end       
end

jhon = Human.new('Jhon','American','M')
mary = Human.new('Mary','German','F')
puts Human.print

機能しません。

もちろん、私はこのようなものを使うことができます

puts Human.current_humans.inspect

しかし、私は他の選択肢を学びたいです!

25
Manza

メソッドpを使用できます。 pを使用することは、実際にオブジェクトでputs + inspectを使用することと同等です。

humans = %w( foo bar baz )

p humans
# => ["foo", "bar", "baz"]

puts humans.inspect
# => ["foo", "bar", "baz"]

ただし、pはデバッグツールであり、通常のワークフローでレコードを印刷するためには使用しないでください。

pp(きれいな印刷)もありますが、最初にそれを要求する必要があります。

require 'pp'

pp %w( foo bar baz )

ppは、複雑なオブジェクトでより適切に機能します。


サイドノートとして、明示的なリターンを使用しないでください

def self.print  
  return @@current_humans.to_s    
end

あるべき

def self.print  
  @@current_humans.to_s    
end

また、4ではなく2文字のインデントを使用します。

49
Simone Carletti