Из-за неизменности у меня возникли проблемы с выяснением того, как обновить список карт с помощью Elixir.
На функциональных языках вы передаете данные в функции, а функции преобразуютсяданные и вернуть его.Итак, самый простой способ сделать то, что вы хотите, это передать список карт в вашу функцию вместе с pscore.Затем функция может вернуть новый список карт.Вот пример:
defmodule PScore do
defstruct score: 0, team_id: 0
end
defmodule My do
def update_pscores(list_of_maps, p_score) do
[%{team_score: p_score.score, team_id: p_score.team_id} | list_of_maps]
end
def go do
pscore = %PScore{score: 3, team_id: 1}
pscores = update_pscores([], pscore)
pscore = %PScore{score: 4, team_id: 2}
pscores = update_pscores(pscores, pscore)
IO.puts(inspect pscores)
end
end
My.go
Компиляция в iex:
> c "my.exs"
warning: redefining module PScore (current version defined in memory)
my.exs:1
warning: redefining module My (current version defined in memory)
my.exs:5
[%{team_id: 2, team_score: 4}, %{team_id: 1, team_score: 3}]
[My, PScore]
Если вы хотите сохранить карты Pscore в том же порядке, в котором они были добавлены в список, вы можете Enum.reverse()
список, возвращаемый update_pscores()
.
Вам определенно не нужно создавать другой процесс, например, Агент или GenServer, для обновления списка в Elixir.