Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
666 views
in Technique[技术] by (71.8m points)

functional programming - Pattern matching key in Erlang maps

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...