我有一个小的ruby函数来返回查询结果。我想检查我的服务器上的env变量,所以我写了这个函数。但它并没有像我预期的那样基于puts输出和代码返回@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 }
....
@result
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 .....
答案 0 :(得分: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
答案 1 :(得分:0)
@result
设置为以下内容......
> @result
=> {"1"=>{"name"=>"jabjab", "company"=>"jibjib"}, "2"=>{"name"=>"blabla"...
但是,我确实注意到query
返回环境的内容,这就是@result
的值。您是否可能按以下方式调用查询,覆盖@result
的值?这很容易被忽视。
> @result = query