1

putsデバッグのためにかなり頻繁に使用 したいオブジェクトがいくつかあります。オブジェクトのデフォルトto_sの方法は、その目的にはあまり適していません。一般に、インスタンスを調べたいと思うので(最も興味深い部分はインスタンス変数です)、次のように思いつきました。

class DebugObject
    def initialize(args)
      raise ArgumentError unless args.is_a? Hash
      args.each { |k,v| instance_variable_set "@#{k}".to_sym,v } 
    end

    def to_s
      str = "#{self.class}:\n"
      instance_variables.each do |var|
        str += " %s: %s" % [var, instance_variable_get(var)]
      end
      str
    end
end

class User < DebugObject
  attrs = [:email, :password, :first_name, :last_name, :street, :postal_code, :city]
  attrs.each { |attr| attr_accessor attr }
end

class CreditCard < DebugObject
  attrs = [:holder, :number, :cardinalidity, :cvc, :error_code, :error_message]
  attrs.each { |attr| attr_accessor attr }
end

puts で使用すると、次のようになります。

User:
 @first_name: Peter @last_name: Parker @street: Street number @postal_code: 9020
 @city: New york @email: peter@parker.com

CreditCard:
  @holder: Martin @number: 00000 @cardinalidity: 09/10 @cvc: 123
  @error_code: 00 @error_message: No eroro :)

to_sデバッグ中に役立つ再利用可能な優れたメソッドを作成するためのヒントやコツがあれば教えてください。

4

1 に答える 1

4

pの代わりに印刷に使用することをお勧めしますputs。インスタンス変数とその値を出力します。 where は、インスタンス変数を出力しない のp結果を出力します。.inspectputs.to_s

于 2013-02-15T12:09:46.120 に答える