问题
I have a map of form shown below:
Map = #{#{country=>"India"} => #{rank => 1}}.
I am trying to match it as follows:
1. #{Key := V} = Map.
OR
2. #{#{country := Country} := #{rank := Rank}} = Map.
But its not working for me. Any help as to how it can be done?
回答1:
When matching key-value associations from maps the key expression must be an expression with literals or bound variables, see the documentation of maps (section Maps in Patterns).
The problem with a match expression like:
#{Key := V} = M.
Where Key
is an unbound variable is that this matches all the key/value bindings in the map M
, not a particular key/value. Same with the other match expression you tried, it can match several keys.
The correct way would be to fully specify the key here, like this
#{#{country => "India"} := V} = Map.
来源:https://stackoverflow.com/questions/34808874/pattern-matching-key-in-erlang-maps