Когда вы сопоставляете несколько предложений для проверки поля, я бы комбинировал функции, которые проверяют части, следующим образом:
defmodule PersonChecker do
def validate(x, person) do
person
|> validate_name(x)
|> validate_age(x)
end
defp validate_name(person, %{name: name}) when name == "Test" do
%{person | name: "Test"}
end
defp validate_name(person, _x), do: person
defp validate_age(person, %{age: age}) when age == 50 do
%{person | age: 50}
end
defp validate_age(_x, person), do: person
end
Если вы хотите использовать case
вместо нескольких validate_name
функцийэто выглядело бы так:
defp validate_name(person, x) do
case x.name do
"Test" -> %{person | name: "Test"}
_ -> person
end
end
В качестве отдельного случая, в зависимости от вашего случая использования, может быть проще использовать x
, чтобы убрать ненужные поля, а затем преобразовать x
в структуру с использованием функции struct(Person, x)
.