2015-04-06 44 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