2012-04-19 53 views
0

我已经有一个学校的哈希图,它具有作为学生的名字的关键。我想提取所有信息并创建散列图,并将学生的School_ID作为主键。 我收到错误如何从红宝石散列图中提取值并存储在数组中?

未定义局部变量或者用于主要方法“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 

回答

2

移动KEY1和ARRAY2到DEF块或将它们作为参数。 Ruby def块不是闭包 - 它们不能访问在它们之外定义的局部变量。

1

当您在ruby中定义一个新的方法时,将会创建一个新的作用域,更多详细信息请参见:metaprogramming access local variables。在方法体

key1=Array.new 
array2=Array.new 

:只是把 -

而不是def print_info(school_hash)你可以使用拉姆达,例如

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

school_hash.call(hash) 

其他的解决方案。

1

您可以将key1更改为@key1array2@array2