温馨提示:本文翻译自stackoverflow.com,查看原文请点击:dictionary - Elixir make a self reference in a map
dictionary elixir

dictionary - Elixir在 map上做自我参考

发布于 2020-03-27 11:10:44

我有这张 map

%{
  total: 38,
  value: 22
}

并想添加密钥:ratio有没有一种方法可以立即写:

%{
  total: 38,
  value: 22,
  ratio: __SELF__.value / __SELF__.total
}

还是我需要创建另一个 map来实现这一目标?

谢谢

查看更多

查看更多

提问者
Augustin Riedinger
被浏览
61
Adam Millerchip 2019-07-03 22:33

所有数据都是不可变的,因此您始终必须制作一张新 map。

一种简单的方法,假设您的 map称为map

iex> Map.put(map, :ratio, map.value / map.total)
%{ratio: 0.5789473684210527, total: 38, value: 22}

如果你的意思是你要创建的 map已经存在之前,那么这将是更好地把totalvalue成变量,并用它们来构建图:

defmodule Example do
  def make_map(total, value) do
    %{total: total, value: value, ratio: value / total}
  end
end

iex(1)> Example.make_map(38, 22)
%{ratio: 0.5789473684210527, total: 38, value: 22}