2016-09-24 32 views
0

新手並正在處理別人的代碼。這是我們的YAMLRuby:#error:未定義的方法`pop'

current_colleges_for_degrees: 
    cahs: 
    label: 'college one' 
    com: 
    label: 'college two' 

additional_current_colleges: 
    another: 
    label: 'another College' 
    yet: 
    label: 'yet another' 
    library: 
    label: 'Libraries' 

那麼我們有這個一個輔助文件:

def sorted_college_list_for_generic_works 
    list = COLLEGE_AND_DEPARTMENT["current_colleges_for_degrees"].merge(
     COLLEGE_AND_DEPARTMENT["additional_current_colleges"] 
    ) 
    list.keys.collect do |k| 
     list[k]["label"] 
    end.sort << "Other" 
end 

我需要這一點,創建一個名爲student_works-可是 - 我需要刪除的最後一個項目的新方法數組:「庫」所以......

def sorted_college_list_for_student_works 
    list = COLLEGE_AND_DEPARTMENT["current_colleges_for_degrees"].merge(
     COLLEGE_AND_DEPARTMENT["additional_current_colleges"] 
    ) 
    ***list.pop*** 
    list.keys.collect do |k| 
     list[k]["label"] 
end.sort << "Other" 
end 

無法得到然而,它的工作...的錯誤是: 「#錯誤:爲...未定義的方法'流行」」

作爲一個新手,我不完全明白錯誤的含義。編輯:有沒有更簡單的方法來完成這一點?隨着我獲得知識而開放給予建議!

+0

你真幸運!比其他人的代碼更有趣嗎? su \\ _(ツ)_/ –

+0

是啊,糟透了吧 – LisaH

回答

3

list不是數組,這是一個哈希值。哈希不定義#pop方法,這就是爲什麼你會收到錯誤。

要從哈希中刪除項目,您可以使用#delete方法並傳遞密鑰。

list.delete("library") 
+0

好的,但是當我插入到上面的代碼中時,我得到 「比較字符串與零失敗」 – LisaH

1

正如@Jack指出的那樣,您正在使用一個不是數組的列表。我的問題是爲什麼你需要刪除最後一個項目?如果你已經知道最後一把鑰匙?

我會走這條路:

my_list.delete(my_list.keys.last)