ruby - 返回方法 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 = {}
并填充它,但是这个哈希也出现在返回中。我尝试删除它,但是当我尝试自行删除时会引发错误。
可以这样做还是我必须像上面那样对其进行硬编码?
解决方案
的文档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
推荐阅读
- python - 如何计算熊猫数据框中列的值并将每个值的计数存储在该数据框的新列中?
- android - 找不到构建工具修订版 26.0.2
- python - django admin 属性覆盖 modelForm Meta for Regex 中的 error_message 和 error_message 字符串中的变量
- c - 文件 I/O 未初始化变量问题 - C 程序
- r - 绑定两个数据帧并删除 R 中的相同行号
- sql - Redshift REGEXP_SUBSTR 获取最后一次匹配
- python - 形状[utils]中的opencv错误使图像和徽标一起出现
- python - 子图色调的相同颜色定义
- xamarin.forms - 在 Xamarin Forms 中将图像从一页传递到另一页
- javascript - 复选框中更复杂的标签 - Vuetify