0

我已经有一个学校的哈希图,其中键是学生的名字。我想提取所有信息并以学生School_ID作为主键创建哈希映射。我收到错误

main:object 的未定义局部变量或方法“key1”

key1 = Array.new
array2 = Array.new

def print_info(school_hash)         
  school_hash.each do |student|     #school_hash  has key as first name
                                    #student[0] contains First Name student[1] all info
    key1.push(student[1].School_ID) #save school_id separately to use as a key
    array2.push(student[1])         # all infos including Address, Grade, School_ID, Sports
  end
  new_hash = Hash[key1.zip(array2)]
  printf("%s",new_hash)
end
4

3 回答 3

2

将 key1 和 array2 移动到 def 块中或将它们作为参数传入。Ruby def 块不是闭包——它们不能访问在它们之外定义的局部变量。

于 2012-04-19T15:01:12.007 回答
1

当您在 ruby​​ 中定义一个新方法时,将创建一个新范围,请参阅:元编程访问局部变量以获取更多详细信息。

def print_info(school_hash)例如,您可以使用 lambda而不是

school_hash = lambda do |school_hash|
  # ..your method body
end

school_hash.call(hash)

其他解决方案 - 只需输入:

key1=Array.new
array2=Array.new

在方法的主体中。

于 2012-04-19T15:02:11.710 回答
1

您可以更改key1@key1和。array2@array2

于 2012-04-19T15:39:14.430 回答