首页 > 解决方案 > 返回方法 local_variables 作为哈希

问题描述

我正在一个方法中生成一些局部变量。我想找到一种方法将它们返回到带有键和值的散列中,但是那个散列的生成最终会在返回本身中。我怎样才能避免这种情况?

def get_map_libs()
  libjq = JSON.parse(File.read(URI.open('https://api.cdnjs.com/libraries/jquery', 'r')))['latest']
  liblf = JSON.parse(File.read(URI.open('https://api.cdnjs.com/libraries/leaflet', 'r')))['latest']
  libbs = JSON.parse(File.read(URI.open('https://api.cdnjs.com/libraries/twitter-bootstrap', 'r')))['latest']
  libfa = JSON.parse(File.read(URI.open('https://api.cdnjs.com/libraries/font-awesome', 'r')))['latest']
  return {libjq: libjq, liblf: liblf, libbs: libbs, libfa: libfa}
#   return local_variables
end

此方法按预期工作。应该有一种抓住local_variables和归还它的方法。但是,当我使用注释掉的 return ( return local_variables) 时,它只返回它们的键:

[
    [0] :libjq,
    [1] :liblf,
    [2] :libbs,
    [3] :libfa
]

我尝试构建一个返回哈希r = {}并填充它,但是这个哈希也出现在返回中。我尝试删除它,但是当我尝试自行删除时会引发错误。

可以这样做还是我必须像上面那样对其进行硬编码?

标签: rubylocal-variables

解决方案


的文档local_variables告诉它只返回一个带有局部变量名称的数组。

但是您可以使用该方法生成哈希:

local_variables.map { |name| [name, eval(name.to_s)] }.to_h

我认为这有点容易出错,因为您可能会返回意外的变量及其值。

也许将您的方法改写成这样会更好:

LIBRARIES = { 
  libjq: 'jquery',
  liblf: 'leaflet',
  libbs: 'twitter-bootstrap',
  libfa: 'font-awesome'
}

def library_urls
  LIBRARIES.map { |k, v| 
    [k, JSON.parse(URI.open("https://api.cdnjs.com/libraries/#{v}").read)['latest']] 
  }.to_h  
end

推荐阅读