我有以下YAML文件:
---
main-menu:
- item: Test1
param: value
- item: Test2
param: value
- notitem: Test3
param: value
我正在尝试解析所有item
条目,如下所示:
#Load menu file
menu = YAML.load_file(file)
#Recursive parse function
parse = lambda do |node|
node.each do |item|
if !item['item'].nil? then
.. do something with item ..
end #end if
end #end each
end #end parse
#Return the main menu
parse.call(menu['main-menu'])
哪种方法很好......是否有更简单的方法可以使用item
过滤掉所有不属于node.each
的条目?
答案 0 :(得分:1)
不是我能看到的。 node
是Array
个Hash
个对象,因此需要先对每个对象进行有条件的检查.. do something with item ..
。您可以使用node.each
next
menu = YAML.load_file(file)
parse = lambda do |node|
node.each do |item|
next unless item.include?('item')
# .. do something with item ..
end
end
parse.call(menu['main-menu'])
您也可以使用块
来调用reject
menu = YAML.load_file(file)
parse = lambda do |node|
node.reject { |n| !n.include?('item') }.each do |item|
# .. do something with item ..
end
end
parse.call(menu['main-menu'])
虽然我不知道这真的“更容易”!