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

itemこれは問題なく動作します... usingではないすべてのエントリを除外する簡単な方法はありますnode.eachか?

4

1 に答える 1

1

私が見ることができるわけではありません。nodeはオブジェクトArrayHashであるため、できるようになる前にそれぞれを条件付きでチェックする必要があります.. 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 に答える