1

我有以下 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'])

哪个工作得很好......有没有更简单的方法来过滤掉所有不是itemusing的条目node.each

4

1 回答 1

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'])

虽然我不知道这真的“更容易”!

于 2012-08-10T20:20:48.787 回答