2013-04-03 18 views
18

この質問があまりにも愚かではないかどうかわかりませんが、それを行う方法が見つかりませんでした。Ruby:配列を印刷して整列する方法

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 

それは動作しません:

は通常、私はこれを持っている場合は、この

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

しかしdoループで配列を置きます。もちろん

私はこの

puts Human.current_humans.inspect 

のようなものを使用することができますが、私は他の選択肢を学びたいです!

答えて

36

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 

なると2文字のインデントを使用し、ない4.

+0

こんにちはすべき明示的なリターンを使用していない、Iこれは古いことを知っていますが、私はちょうどKatasをやっていて、このポストに出くわしました。なぜ 'p'を使わないのですか(できるだけデバッグするよりも深い説明です)?また、私は 'a 'という配列に' p a'と 'put a.inspect'を使用し、' p a'だけが働きました。何か不足していますか? – rorykoehler

関連する問題