2

クエリ結果を返す小さな ruby​​ 関数があります。サーバーの環境変数を確認したいので、この関数を書きました。しかし、プット出力とコードに基づいて期待したように @result を返しません。私は何を間違っていますか?

  def query(params=nil)
    @result = {}
    count = 1
    ENV.each do |k,v|
     @result[count.to_s] = { "name" => k, "company" => v }
     puts "[#{count.to_s}] = { 'name' => #{k}, 'company' => #{v} }"
     count += 1
    end
  end

出力を置きます:

irb(main):070:0> query
[1] = { 'name' => ALLUSERSPROFILE, 'company' => C:\ProgramData }
[2] = { 'name' => APPDATA, 'company' => C:\Users\xxxx\AppData\Roaming }
[3] = { 'name' => CLIENTNAME, 'company' => xxxx }
[4] = { 'name' => COLUMNS, 'company' => 160 }
[5] = { 'name' => CommonProgramFiles, 'company' => C:\Program Files (x86)\Common Files }
[6] = { 'name' => CommonProgramFiles(x86), 'company' => C:\Program Files (x86)\Common Files }
[7] = { 'name' => CommonProgramW6432, 'company' => C:\Program Files\Common Files }
....

@結果

irb(main):075:0> @result
=> {"ALLUSERSPROFILE"=>"C:\\ProgramData", "APPDATA"=>"C:\\Users\\xxxx\\AppData\\Roaming", "CLIENTNAME"=>"wxxxx", "COLUMNS"=>"160", "CommonProgramFiles"=>"C:
\\Program Files (x86)\\Common Files", "CommonProgramFiles(x86)"=>"C:\\Program Files (x86)\\Common Files", "CommonProgramW6432"=>"C:\\Program Files\\Common Files .....
4

2 に答える 2

1

リストに配列を使用します。

def query
  ENV.map {|k,v|  { "name" => k, "company" => v } }
end

@result = query

必要に応じて印刷します。

インデックス付きハッシュが本当に必要な場合は、次を使用します。

def query
  result = []
  ENV.each_with_index {|v,i|  result.push(i, { "name" => v[0], "company" => v[1] }) }
  Hash[*result]
end
于 2012-08-21T05:21:27.943 に答える
0

うーん、それは奇妙です。コードをローカルで実行したところ、期待どおりに動作し@result、次のような設定になっています...

 > @result
 => {"1"=>{"name"=>"jabjab", "company"=>"jibjib"}, "2"=>{"name"=>"blabla"...

queryただし、の値がどのように見えるかである、環境の内容を返すことに気付きました@result。の値を上書きして、次のようにクエリを呼び出している可能性はあります@resultか? これは見落としがちです。

> @result = query
于 2012-08-21T02:18:08.053 に答える