运行测试时,我经常遇到错误的nil
值。为了找到问题,我最终插入了一堆行,如:
puts 'variable x is nil' if x.nil?
puts 'variable y is nil' if y.nil?
...
慢慢让我更接近问题。是否有宝石或其他东西可以快速打印当前范围内所有nil
变量的列表?或者一些调试我的方法的方法有点费力?
答案 0 :(得分:3)
如果您正在使用所谓的printf
- 调试来追踪这些问题,那么您可能做错了。您可能希望编写断言存在值的测试,然后声明其他条件:
assert x
assert y
您似乎很难获得如此大量的nil
值,而您需要这些值来追踪它们。通常它们是在特定时间点生产的,因此应尽快将它们捕获,以避免以后再检查它们:
x = foo('a', 'b')
assert x, "foo(...) did not return a value"
答案 1 :(得分:1)
如果您正在进行printf调试,您也可以使用inspect
- 这就是它的设计目标:
puts 'variable x is #{x.inspect}'
puts 'variable y is #{y.inspect}'
可能有元编程方法来获取所有局部变量,但我认为这有点过头了。