2015-04-06 36 views
0

我收到以下错误,当我从我的RSpec的文件中运行我的代码:红宝石填充的阵列

pad pads element to the end of an array 

Failure/Error: expect(pad(array,array.length + pad_size, 'apple')).to  eq(array+Array.new(pad_size, 'apple')) 

expected: ["apple", "apple", "apple",...] 

我当前的代码是:

def pad!(array, min_size, value = nil) #destructive 

    difference = min_size-array.length 

    difference.times {array << value} 

    array 
end 

def pad(array, min_size, value = nil) #non-destructive 

    difference = min_size-array.length 

    difference.times {array << value} 

    array.clone 

end  

谁能帮助我弄清楚为什么它给我这个错误信息?我认为{array < < value}在我的数组输入结尾添加了新的元素。谢谢!

+0

你还可以给出输入数据数组,以便我可以运行和调试? –

+0

你的'new_array = array.clone'应该上去。 –

回答

3

您的非破坏性版本实际上是破坏性的。你想要的可能是这样的:

def pad(array, min_size, value = nil) 
    pad!(array.clone, min_size, value) 
end 

两次实现相同的行为没有意义。让另一座桥脱颖而出。

+0

谢谢@tadman我是Ruby的新天,我试图找出一种方法来运行你在这里,但一直运行在我的PowerShell的错误,因为我试图做array.clone.pad!(min_size ,价值),我现在看到我的问题! – user1762229

+0

根本没有问题。如果你感觉冒险,可以将这些方法放在Array的一部分,这样你就可以调用诸如'array.pad(...)'之类的东西了。这可以清理你的代码很多。 – tadman