有什么方法可以在范围内打印所有nil对象吗?

时间:2012-03-05 16:02:39

标签: ruby debugging null

运行测试时,我经常遇到错误的nil值。为了找到问题,我最终插入了一堆行,如:

puts 'variable x is nil' if x.nil?
puts 'variable y is nil' if y.nil?
...

慢慢让我更接近问题。是否有宝石或其他东西可以快速打印当前范围内所有nil变量的列表?或者一些调试我的方法的方法有点费力?

2 个答案:

答案 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}'

可能有元编程方法来获取所有局部变量,但我认为这有点过头了。