我有一个脚本从具有大量哈希和子对象的对象中提取数据。
我目前通过以下调用读取值:
node_item.automatic[:ipaddress]
node_item.normal.network[:location]
node_item.default["motd"][:additional_text]
对于大型列表,维护变得难以操作,我认为应该有更好的方法。
我已经设置了一个类似于下面的哈希数组:
{
:display_name => "Internal IP",
:key => "automatic[:ipaddress]",
:value => ""
},
{
:display_name => "Location",
:key => "normal.network[:location]",
:value => ""
},
{
:display_name => "Description",
:key => "default['motd'][:additional_text]",
:value => ""
}
我尝试过使用
node_item.send(hash[:key])
由于那里的符号和哈希调用而无效。
我的最后一次尝试是:
field[:key].inject(node_item){ |r, m| r.send(r); r }[field[:value]]`
它只是抛出一个包含响应的整个顶级对象的错误:
is not a symbol (TypeError)`
我尝试将变量移动到他们自己的密钥但是我遇到了多功能调用和一些响应的多级哈希问题。
使其工作似乎需要与调用巨大列表一样多的特殊情况代码。
我知道我可以使用eval()
来执行此操作,但如果我从命令行获取输入,则可能会产生安全隐患。