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

、およびkey1に変更できます。@key1array2@array2

于 2012-04-19T15:39:14.430 に答える
1

Ruby で新しいメソッドを定義すると、新しいスコープが作成されます。詳細については、メタプログラミング アクセス ローカル変数を参照してください。

def print_info(school_hash)たとえば、代わりにラムダを使用できます

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 に答える