Есть ли геттеры и сеттеры в Elixir или есть другие варианты?
Извините ребята за глупый вопрос, я знаю что Elixir это функциональный язык программирования, но мне просто очень хочется узнать как сделать не используя get/set. Задача такая,к примеру у нас, есть переменная и мы хотим сохранять только определенной длины текстовое значения. Вот к примеру как я сделал на Dart, пожалуйста ребята не судите меня строго. Мне просто интересно можно такой вариант сделать Elixir
class X {
String Zem = "";
String get xx {
return Zem;
}
set xx(String sum) {
if (sum.length < 5) {
print("No");
} else {
this.Zem = sum;
print("Welcom ${Zem.toUpperCase()}");
}
}
}
void main() {
X c = new X();
c.xx = "xamarin";
}
Ответы (1 шт):
Автор решения: Alexandr Sysoev
→ Ссылка
В Elixir используется акторная модель с иммутабельными структурами данных, поэтому для решения подобной задачи может использоваться абстракция, которая называется Agent.
defmodule X do
use Agent
def start_link(initial_value) do
Agent.start_link(fn -> initial_value end, name: __MODULE__)
end
def get do
Agent.get(__MODULE__, & &1)
end
def set(new_value) do
Agent.update(__MODULE__, fn _ -> new_value end)
end
end
Далее можно использовать этот агент из любого места в проекте примерно вот так:
X.start_link("") # {:ok, #PID<0.126.0>}
X.get() # ""
X.set("xamarin") # :ok
X.get() # "xamarin"