如何在Map具有传入值的键的函数中进行模式匹配?

时间:2016-04-05 02:24:31

标签: erlang

所以我正在创建一个IRC服务器,我有一个从Map中删除用户的功能。我们的想法是使用模式匹配,因此如果用户在地图中,则会调用函数的一个版本,否则会调用另一个函数。

我的第一个想法是做以下事情:

remove_user_from_channel(User, Channel=#channel_details{users = UserMap=#{User := _}}) ->
  Channel#channel_details{users = maps:remove(User, UserMap)}.

但是,无法使用错误variable 'User' is unbound进行编译。

有没有办法用功能级别模式匹配来完成这个?

2 个答案:

答案 0 :(得分:3)

你不能在函数头中对地图键进行模式匹配,但你可以在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.

答案 1 :(得分:2)

is_key(Key, Map) -> boolean()

我认为您无法在功能级别使用匹配模式,但您可以使用User检查UserMap中的class RandomImage: UITableViewCell { @IBOutlet weak var ImageView: UIImageView! @IBOutlet weak var ChangingButton: UIButton! override func awakeFromNib() { super.awakeFromNib() // Initialization code self.ChangingButton.setTitle("Change", forState: UIControlState.Normal) } @IBAction func changeImageTapped(sender: UIButton){ var firstRandomNumber = arc4random_uniform(NUMBER) + 1 var firstImageString:String = String(format: "image%i", firstRandomNumber) self.ImageView.image = UIIMAge(named: firstImageString) } 。 链接在这里: http://erlang.org/doc/man/maps.html#is_key-2