作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在创建一个 IRC 服务器,并且我有一个从 map 中删除用户的函数。这个想法是使用模式匹配,因此如果用户在 map 中,则调用一个函数的一个版本,否则调用另一个函数。
我的第一个想法是执行以下操作:
remove_user_from_channel(User, Channel=#channel_details{users = UserMap=#{User := _}}) ->
Channel#channel_details{users = maps:remove(User, UserMap)}.
但是,编译失败,并出现错误variable 'User' is unbound
。
有什么方法可以通过函数级模式匹配来实现这一点吗?
最佳答案
您无法在函数头中对映射键进行模式匹配,但可以在 case
中进行:
remove_user_from_channel(User, Map) ->
case Map of
Channel = #channel_details{users = UserMap = #{User := _}} ->
Channel#channel_details{users = maps:remove(User, UserMap)};
_ ->
other
end.
关于erlang - 如何在 Map 具有带有传入值的键的函数中进行模式匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36416053/
我是一名优秀的程序员,十分优秀!