Ruby:#error:未定义的方法`pop'

时间:2016-09-24 17:46:17

标签: ruby-on-rails ruby

新手和其他人的代码。这是我们的yaml

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的新方法 - 但是我需要删除数组中的最后一项:&#34; Libraries&#34;所以...

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

但是不能让它工作......错误是: &#34; #error:未定义的方法`pop&#39;为...&#34;

作为一个新手,我不完全理解错误的含义。编辑:有没有更简单的方法来实现这一目标?在获得知识的同时接受建议!

2 个答案:

答案 0 :(得分:3)

list不是数组,而是哈希。哈希不定义#pop方法,这就是您收到错误的原因。

要从哈希中删除项目,您可以使用#delete方法并传递密钥。

list.delete("library")

答案 1 :(得分:1)

正如@Jack指出的那样,你正在使用的是列表而不是数组。我的问题是你为什么需要删除最后一项?如果你已经知道最后一把钥匙了吗?

我会这样:

my_list.delete(my_list.keys.last)