测试遇到的一个坑,在那里找了大半天,最后发现错误的原因是compact!导致,记录下。
出错原因在于我之前对于compact 与compact!的理解,错误的理解是:compact用于去除数组对象中的nil,而不改变数组对象本身,而compact!与compact唯一的不同在于它会改变调用对象的值。
比如:
a = [ "a", nil, "b", nil, "c" ]
a.compact
#=> ["a", "b", "c"]
a
#=> ["a", nil, "b", nil, "c"]
a.compact!
#=> ["a", "b", "c"]
a
#=> ["a", "b", "c"]
But!!
如果这个数组本身没有nil,两者的结果完全不同。调用compact或者compact!,数组都不变,但是compact!返回的却是nil。
看例子:
b = ["a", "b", "c"]
b.compact
#=> ["a", "b", "c"]
b
#=> ["a", "b", "c"]
b.compact!
#=> nil
b
#=> ["a", "b", "c"]
也就是说在数组中没有nil的情况下,使用compact!返回的值是nil,同时数组本身不会改变。