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
相关产品推荐
相关产品推荐

