You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Elixir:如何实现Map不存在键则添加,存在则抛出错误?

Elixir中实现“键不存在则添加,存在则报错”的方法

Elixir标准库没有直接提供满足该需求的内置函数,但可以通过组合现有函数或自定义函数轻松实现。

实现方式一:结合Map.has_key?和条件判断

def put_new_or_error(map, key, value) do
  if Map.has_key?(map, key) do
    raise ArgumentError, "Key #{inspect(key)} already exists in the map"
  else
    Map.put_new(map, key, value)
  end
end

实现方式二:使用with语句匹配Map.fetch结果

def put_new_or_error(map, key, value) do
  with :error <- Map.fetch(map, key) do
    Map.put(map, key, value)
  else
    {:ok, _} -> raise ArgumentError, "Key #{inspect(key)} already present"
  end
end

使用示例

  • 键不存在时,正常添加键值对:
iex> put_new_or_error(%{}, :name, "Alice")
%{name: "Alice"}
  • 键已存在时,抛出错误:
iex> put_new_or_error(%{name: "Bob"}, :name, "Alice")
** (ArgumentError) Key :name already present

内容的提问来源于stack exchange,提问作者Tim Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:05:21