如何在ruby中从哈希映射中提取值并存储在数组中?

如何在ruby中从哈希映射中提取值并存储在数组中?,ruby,arrays,hash,Ruby,Arrays,Hash,我已经有一张学校的散列图,上面的键是学生的名字。我想提取所有信息并创建哈希图,将学生的学校ID作为主键。 我犯了一个错误 main:对象的未定义局部变量或方法“key1” 将key1和array2移动到def块中或作为参数传入。Ruby def块不是闭包——它们无法访问在其外部定义的局部变量。将key1和array2移动到def块中或作为参数传入。Ruby def块不是闭包——它们不能访问在它们外部定义的局部变量。在Ruby中定义新方法时,将创建一个新的作用域,有关详细信息,请参阅 例如,您可以

我已经有一张学校的散列图,上面的键是学生的名字。我想提取所有信息并创建哈希图,将学生的
学校ID
作为主键。 我犯了一个错误

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


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

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

在Ruby中定义新方法时,将创建一个新的作用域,有关详细信息,请参阅

例如,您可以使用lambda来代替
def print\u info(school\u hash)

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

school_hash.call(hash)
其他解决方案-仅提出:

key1=Array.new
array2=Array.new

在方法的主体中。

在ruby中定义新方法时,将创建一个新的作用域,有关详细信息,请参阅

例如,您可以使用lambda来代替
def print\u info(school\u hash)

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

school_hash.call(hash)
其他解决方案-仅提出:

key1=Array.new
array2=Array.new

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

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