ruby - 编写一个很棒的、可重用的 "to_s"方法以更好地调试

标签 ruby object

<分区>

我有几个对象,我想经常放置以进行调试。 Objects默认的 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 方法?

最佳答案

我建议只使用 p 来打印而不是 putsp 在对象上打印.inspect 的结果,打印出实例变量及其值,其中puts 打印出.to_s,它不打印实例变量。

关于ruby - 编写一个很棒的、可重用的 "to_s"方法以更好地调试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14893628/

相关文章:

ruby-on-rails - rake 数据库 :migrate does not change table

python - 帮我对编程语言进行一些分类

javascript - 依赖于 DOM 动态改变对象内的变量

java - 如何从我拥有的对象中获取变量?

javascript - 将数组元素分配为对象属性,值为 'counter'

ruby-on-rails - 停止 AASM 过渡的最佳方法是什么

sql - 使用 Sequel,我可以创建带有 FROM 子句的 UPDATE 语句吗

arrays - Ruby 将数组映射到哈希

德尔福。克隆一个对象

javascript - 为什么无法通过实例化构造函数方法将对象插入数组?