เชธเชฎเชฏ เชถเซเชฐเซ‡เชฃเซ€ เช…เชจเซ‡ เชตเชงเซ เชฎเชพเชŸเซ‡ เชตเซ‡เชฒเชพ โ†’ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‡เชถ

เชซเชฟเชจเชŸเซ‡เช•เชฎเชพเช‚, เช…เชฎเชพเชฐเซ‡ เชฎเซ‹เชŸเชพเชญเชพเช—เซ‡ เชšเชฒเชฃ เชตเชฟเชจเชฟเชฎเชฏ เชฆเชฐเชจเชพ เชกเซ‡เชŸเชพเชจเชพ เชฎเซ‹เชŸเชพ เชชเซเชฐเชฎเชพเชฃเชฎเชพเช‚ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเชตเซ€ เชชเชกเซ‡ เช›เซ‡. เช…เชฎเซ‡ เชตเชฟเชตเชฟเชง เชธเซเชคเซเชฐเซ‹เชคเซ‹เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพ เชฎเซ‡เชณเชตเซ€เช เช›เซ€เช, เช…เชจเซ‡ เชคเซ‡เชฎเชพเช‚เชจเชพ เชฆเชฐเซ‡เช• เชชเชพเชธเซ‡ เช†เชตเชคเซ€ เช•เชพเชฒ, เช†เช—เชฒเชพ เชฆเชฟเชตเชธเซ‡, เช†เชตเชคเชพ เชฎเชนเชฟเชจเซ‡ เช…เชจเซ‡ เช†เช—เชพเชฎเซ€ เชคเซเชฐเชฃ เชตเชฐเซเชท เชฎเชพเชŸเซ‡ เชตเชฟเชจเชฟเชฎเชฏ เชฆเชฐเซ‹ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชเช•เซเชธเซเชŸเซเชฐเชพเชชเซ‹เชฒเซ‡เชŸ เช•เชฐเชตเชพ เชคเซ‡เชจเซ‹ เชชเซ‹เชคเชพเชจเซ‹ เชตเชฟเชšเชพเชฐ เช›เซ‡. เชœเซ‹ เช•เซ‹เชˆ เชตเซเชฏเช•เซเชคเชฟ เชฆเชฐเซ‹เชจเซ€ เช†เช—เชพเชนเซ€ เช•เชฐเซ€ เชถเช•เซ‡ เช…เชงเชฟเช•เชพเชฐ, เชคเซ‡ เชงเช‚เชงเซ‹ เชฌเช‚เชง เช•เชฐเชตเชพเชจเซ‹ เช…เชจเซ‡ เชฎเชพเชคเซเชฐ เชฎเซ‚เชฐเซเช–เชคเชพเชชเซ‚เชฐเซเชตเช• เชชเซˆเชธเชพ เชฌเชฆเชฒเชตเชพเชจเซ‹ เชธเชฎเชฏ เชนเชถเซ‡. เช•เซ‡เชŸเชฒเชพเช• เชธเซเชคเซเชฐเซ‹เชคเซ‹ เชตเชงเซ เชตเชฟเชถเซเชตเชธเชจเซ€เชฏ เช›เซ‡, เช•เซ‡เชŸเชฒเชพเช• เชธเช‚เชชเซ‚เชฐเซเชฃ เช•เชšเชฐเซ‹ เชชเซ‚เชฐเชพ เชชเชพเชกเซ‡ เช›เซ‡, เชœเซ‡เชฎเชพเช‚ เชฒเช—เชญเช— เชธเชพเชšเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเชพ เชฆเซเชฐเซเชฒเชญ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡, เชชเชฐเช‚เชคเซ เชตเชฟเชฆเซ‡เชถเซ€ เชฏเซเช—เชฒเซ‹ เชฎเชพเชŸเซ‡. เช…เชฎเชพเชฐเซเช‚ เช•เชพเชฐเซเชฏ เชธเซ‡เช•เชจเซเชก เชฆเซ€เช  เช† เชฆเชธ เชนเชœเชพเชฐเซ‹ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชคเชชเชพเชธเชตเชพเชจเซเช‚ เช…เชจเซ‡ เช—เซเชฐเชพเชนเช•เซ‹เชจเซ‡ เชฌเชฐเชพเชฌเชฐ เชถเซเช‚ เชฌเชคเชพเชตเชตเชพเชจเซเช‚ เช›เซ‡ เชคเซ‡ เชจเช•เซเช•เซ€ เช•เชฐเชตเชพเชจเซเช‚ เช›เซ‡. เช†เชชเชฃเซ‡ เชŸเชจ เช—เช‚เชฆเช•เซ€ เช…เชจเซ‡ เช•เชพเช‚เชชเชฎเชพเช‚เชฅเซ€ เชเช• เชธเชพเชšเซ€ เช•เชฟเช‚เชฎเชค เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡, เชœเซ‡เชฎ เชซเซเชฒเซ‡เชฎเชฟเช‚เช—เซ‹ เชฒเช‚เชšเชฎเชพเช‚ เช•เชฐเซ‡ เช›เซ‡.

เชธเชฎเชฏ เชถเซเชฐเซ‡เชฃเซ€ เช…เชจเซ‡ เชตเชงเซ เชฎเชพเชŸเซ‡ เชตเซ‡เชฒเชพ โ†’ เชธเซเชฎเชพเชฐเซเชŸ เช•เซ‡เชถ

เชซเซเชฒเซ‡เชฎเชฟเช‚เช—เซ‹เชจเซเช‚ เชเช• เชตเชฟเชถเชฟเชทเซเชŸ เชตเชฟเชถเชฟเชทเซเชŸ เชฒเช•เซเชทเชฃ เชคเซ‡เชฎเชจเซ€ เชจเซ€เชšเซ‡เชจเซ€ เชคเชฐเชซ เชตเชณเซ‡เชฒเซ€ เชšเชพเช‚เชš เช›เซ‡, เชœเซ‡เชจเชพ เชตเชกเซ‡ เชคเซ‡เช“ เชชเชพเชฃเซ€ เช…เชฅเชตเชพ เช•เชพเชฆเชตเชฎเชพเช‚เชฅเซ€ เช–เซ‹เชฐเชพเช•เชจเซ‡ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเซ‡ เช›เซ‡.
 - เชตเชฟเช•เซ€

เช†เชฎ เชชเซเชธเซเชคเช•เชพเชฒเชฏเชจเซ‹ เชœเชจเซเชฎ เชฅเชฏเซ‹ Vela, เชœเซ‡ เชจเชฟเชฐเซเชฆเชฟเชทเซเชŸ เชธเชฎเชฏ เช…เช‚เชคเชฐเชพเชฒเซ‹ เชชเชฐ เชฌเชนเซเชตเชฟเชง เชฎเซ‚เชฒเซเชฏเซ‹ เชฎเชพเชŸเซ‡ เชธเซเชŸเซ‡เชŸ เช•เซ‡เชถ เชธเซเชŸเซ‹เชฐ เช•เชฐเซ‡ เช›เซ‡. เชนเซ‚เชก เชนเซ‡เช เชณ, เชคเซ‡ เชซเซเชฒเชพเชฏ เชชเชฐ เช–เชฐเชพเชฌ เช…เชจเซ‡ เชœเซ‚เชจเชพ เชกเซ‡เชŸเชพเชจเซ‡ เชซเชฟเชฒเซเชŸเชฐ เช•เชฐเซ‡ เช›เซ‡, เช…เชจเซ‡ เชจเชตเซ€เชจเชคเชฎ เชเช•เซเชธเซ‡เชธ เชชเชฃ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡ N เชฆเชฐเซ‡เช• เช•เซ€ เชฎเชพเชŸเซ‡ เชฎเชพเชจเซเชฏ เชฎเซ‚เชฒเซเชฏเซ‹ (เชšเชฒเชฃ เชœเซ‹เชกเซ€เช“, เช…เชฎเชพเชฐเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚).

เชšเชพเชฒเซ‹ เช•เชนเซ€เช เช•เซ‡ เช…เชฎเซ‡ เชคเซเชฐเชฃ เชšเชฒเชฃ เชœเซ‹เชกเซ€ เชฎเชพเชŸเซ‡ เชฆเชฐเซ‹ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ€เช เช›เซ€เช. เชธเซŒเชฅเซ€ เชธเชฐเชณ เชตเซเชฏเชพเช–เซเชฏเชพ Vela เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟเชจเซ‡ เชธเช‚เช—เซเชฐเชนเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชคเซ‡ เช•เช‚เชˆเช• เช†เชจเชพ เชœเซ‡เชตเซเช‚ เชฆเซ‡เช–เชพเชถเซ‡:

defmodule Pairs do
  use Vela,
    eurusd: [sorter: &Kernel.<=/2],
    eurgbp: [limit: 3, errors: 1],
    eurcad: [validator: Pairs]

  @behaviour Vela.Validator

  @impl Vela.Validator
  def valid?(:eurcad, rate), do: rate > 0
end

เชฎเซ‚เชฒเซเชฏเซ‹ เช…เชชเชกเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

Vela.put/3 เชซเช‚เช•เซเชถเชจ เช•เซเชฐเชฎเชฎเชพเช‚ เชจเซ€เชšเซ‡เชจเชพ เช•เชฐเชถเซ‡:

  • เช•เชพเชฐเชฃ เชฌเชจเชถเซ‡ validator เชฎเซ‚เชฒเซเชฏ เชชเชฐ, เชœเซ‹ เชเช• เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ (เชชเซเชฐเช•เชฐเชฃ เชœเซเช“ เชฎเชพเชจเซเชฏเชคเชพ เชจเซ€เชšเซ‡);
  • เชœเซ‹ เชฎเชพเชจเซเชฏเชคเชพ เชธเชซเชณ เชฅเชˆ เชนเซ‹เชฏ เชคเซ‹ เชธเชพเชฐเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ€ เชชเช‚เช•เซเชคเชฟเชฎเชพเช‚ เช…เชฅเชตเชพ เชธเซ‡เชตเชพ เชชเช‚เช•เซเชคเชฟเชฎเชพเช‚ เชฎเซ‚เชฒเซเชฏ เช‰เชฎเซ‡เชฐเชถเซ‡ :__errors__ เช…เชจเซเชฏเชฅเชพ;
  • เชœเซ‹ เชธเซ‹เชฐเซเชŸเชฟเช‚เช—เชจเซเช‚ เช•เชพเชฐเชฃ เชฌเชจเชถเซ‡ sorter เช†เชชเซ‡เชฒ เช•เซ€ เชฎเชพเชŸเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชฅเชตเชพ เชซเช•เซเชค เชธเซ‚เชšเชฟเชจเชพ เชฎเชฅเชพเชณเซ‡ เชฎเซ‚เชฒเซเชฏ เชฎเซ‚เช•เชถเซ‡ (LIFO, เชชเซเชฐเช•เชฐเชฃ เชœเซเช“ เชธortเชฐเซเชŸเชฟเช‚เช— เชจเซ€เชšเซ‡);
  • เชชเชฐเชฟเชฎเชพเชฃ เช…เชจเซเชธเชพเชฐ เชชเช‚เช•เซเชคเชฟเชจเซ‡ เชŸเซเชฐเชฟเชฎ เช•เชฐเชถเซ‡ :limit เชธเชฐเซเชœเชจ เชชเชฐ เชชเชธเชพเชฐ;
  • เช…เชชเชกเซ‡เชŸ เช•เชฐเซ‡เชฒ เชฎเชพเชณเช–เซเช‚ เชชเชฐเชค เช•เชฐเชถเซ‡ Vela.

iex|1 > pairs = %Pairs{}
iex|2 > Vela.put(pairs, :eurcad, 1.0)
#โ‡’ %Pairs{..., eurcad: [1.0], ...}
iex|3 > Vela.put(pairs, :eurcad, -1.0)
#โ‡’ %Pairs{__errors__: [eurcad: -1.0], ...}
iex|4 > pairs |> Vela.put(:eurusd, 2.0) |> Vela.put(:eurusd, 1.0)
#โ‡’ %Pairs{... eurusd: [1.0, 2.0]}

เชชเชฃ Vela เช“เชœเชพเชฐเซ‹ Access, เชœเซ‡เชฅเซ€ เชคเชฎเซ‡ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชถเชธเซเชคเซเชฐเชพเช—เชพเชฐเชฎเชพเช‚เชฅเซ€ เชŠเช‚เชกเชพ เช…เชชเชกเซ‡เชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เช•เซ‹เชˆเชชเชฃ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เช•เชพเชฐเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹. Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, เช…เชจเซ‡ Kernel.get_and_update_in/3.

เชฎเชพเชจเซเชฏเชคเชพ

เชฎเชพเชจเซเชฏเช•เชฐเซเชคเชพเชจเซ‡ เช† เชฐเซ€เชคเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡:

  • เชเช• เชฆเชฒเซ€เชฒ เชธเชพเชฅเซ‡ เชฌเชพเชนเซเชฏ เช•เชพเชฐเซเชฏ (&MyMod.my_fun/1), เชคเซ‡ เชฎเชพเชคเซเชฐ เชฎเชพเชจเซเชฏเชคเชพ เชฎเชพเชŸเซ‡ เชฎเซ‚เชฒเซเชฏ เชชเซเชฐเชพเชชเซเชค เช•เชฐเชถเซ‡;
  • เชฌเซ‡ เชฆเชฒเซ€เชฒเซ‹ เชธเชพเชฅเซ‡ เชฌเชพเชนเซเชฏ เช•เชพเชฐเซเชฏ, &MyMod.my_fun/2, เชคเซ‡เชฃเซ€เชจเซ‡ เชเช• เชœเซ‹เชกเซ€ เชฎเชณเชถเซ‡ serie, value เชฎเชพเชจเซเชฏเชคเชพ เชฎเชพเชŸเซ‡;
  • เชฎเซ‹เชกเซเชฏเซเชฒ เช…เชฎเชฒเซ€เช•เชฐเชฃ Vela.Validator;
  • เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ เชชเชฐเชฟเชฎเชพเชฃ threshold, เช…เชจเซ‡ - เชตเซˆเช•เชฒเซเชชเชฟเช• เชฐเซ€เชคเซ‡ - compare_by, เชชเซเชฐเช•เชฐเชฃ เชœเซเช“ เชธเชฐเช–เชพเชฎเชฃเซ€ เชจเซ€เชšเซ‡.

เชœเซ‹ เชฎเชพเชจเซเชฏเชคเชพ เชธเชซเชณ เชฅเชพเชฏ, เชคเซ‹ เช•เชฟเช‚เชฎเชค เช…เชจเซเชฐเซ‚เชช เช•เซ€ เชนเซ‡เช เชณ เชธเซ‚เชšเชฟเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡; เช…เชจเซเชฏเชฅเชพ, เชŸเซเชฏเซเชชเชฒ {serie, value} เชœเชพเชฏ เช›เซ‡ :__errors_.

เชธเชฐเช–เชพเชฎเชฃเซ€

เช† เชชเช‚เช•เซเชคเชฟเช“เชฎเชพเช‚ เชธเช‚เช—เซเชฐเชนเชฟเชค เชฎเซ‚เชฒเซเชฏเซ‹ เช•เช‚เชˆเชชเชฃ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡. เชญเชฃเชพเชตเชตเชพ Vela เชคเซ‡เชฎเชจเซ€ เชธเชฐเช–เชพเชฎเชฃเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡เชจเซ‡ เชธเซเชฅเชพเชจเชพเช‚เชคเชฐเชฟเชค เช•เชฐเชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡ compare_by เชถเซเชฐเซ‡เชฃเซ€ เชตเซเชฏเชพเช–เซเชฏเชพเชฎเชพเช‚ เชชเชฐเชฟเชฎเชพเชฃ (เชธเชฟเชตเชพเชฏ เช•เซ‡ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ€ เชชเซเชฐเชฎเชพเชฃเชญเซ‚เชค เชธเชพเชฅเซ‡ เชคเซเชฒเชจเชพ เช•เชฐเซ€ เชถเช•เชพเชคเซ€ เชจเชฅเซ€ Kernel.</2); เช† เชชเชฐเชฟเชฎเชพเชฃ เชชเซเชฐเช•เชพเชฐเชจเซเช‚ เชนเซ‹เชตเซเช‚ เชœเซ‹เชˆเช (Vela.value() -> number()). เชฎเซ‚เชณเชญเซ‚เชค เชฐเซ€เชคเซ‡ เชคเซ‡ เชธเชฐเชณ เช›เซ‡ & &1.

เช‰เชชเชฐเชพเช‚เชค, เชคเชฎเซ‡ เชชเช‚เช•เซเชคเชฟ เชตเซเชฏเชพเช–เซเชฏเชพเชฎเชพเช‚ เชชเชฐเชฟเชฎเชพเชฃ เชชเชธเชพเชฐ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ comparator เชกเซ‡เชฒเซเชŸเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ€ เช—เชฃเชคเชฐเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ (min/max); เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชŸเซเชฐเชพเชจเซเชธเชฎเชฟเชŸ เช•เชฐเซ€เชจเซ‡ Date.diff/2 เชคเซเชฒเชจเชพเช•เชพเชฐ เชคเชฐเซ€เช•เซ‡, เชคเชฎเซ‡ เชคเชพเชฐเซ€เช–เซ‹ เชฎเชพเชŸเซ‡ เชฏเซ‹เช—เซเชฏ เชกเซ‡เชฒเซเชŸเชพ เชฎเซ‡เชณเชตเซ€ เชถเช•เซ‹ เช›เซ‹.

เช•เชพเชฎ เช•เชฐเชตเชพเชจเซ€ เชฌเซ€เชœเซ€ เช…เชจเซเช•เซ‚เชณ เชฐเซ€เชค เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชชเชพเชธ เช•เชฐเชตเซ€ เช›เซ‡ threshold, เชœเซ‡ เชจเชตเชพ เชฎเซ‚เชฒเซเชฏเชจเชพ เชฎเชนเชคเซเชคเชฎ เช…เชจเซเชฎเชคเชฟเชชเชพเชคเซเชฐ เช—เซเชฃเซ‹เชคเซเชคเชฐเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‡ เช›เซ‡ {min, max} เช…เช‚เชคเชฐเชพเชฒ. เชคเซ‡ เชŸเช•เชพเชตเชพเชฐเซ€ เชคเชฐเซ€เช•เซ‡ เช‰เชฒเซเชฒเซ‡เช–เชฟเชค เชนเซ‹เชตเชพเชฅเซ€, เชšเซ‡เช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชคเซ‹ เชจเชฅเซ€ comparatorเชชเชฐเช‚เชคเซ เชนเชœเซ เชชเชฃ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡ compare_by. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชคเชพเชฐเซ€เช– เชธเชฎเชฏ เชฎเชพเชŸเซ‡ เชฅเซเชฐเซ‡เชถเซ‹เชฒเซเชก เชฎเซ‚เชฒเซเชฏเชจเซ‹ เช‰เชฒเซเชฒเซ‡เช– เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเซเช‚ เช†เชตเชถเซเชฏเช• เช›เซ‡ compare_by: &DateTime.to_unix/1 (เชชเซ‚เชฐเซเชฃเชพเช‚เช• เชฎเซ‚เชฒเซเชฏ เชฎเซ‡เชณเชตเชตเชพ เชฎเชพเชŸเซ‡) เช…เชจเซ‡ threshold: 1, เชœเซ‡เชจเชพ เช•เชพเชฐเชฃเซ‡ เชจเชตเชพ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชฎเชพเชคเซเชฐ เชคเซเชฏเชพเชฐเซ‡ เชœ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‹ เชคเซ‡เช“ เช…เช‚เชฆเชฐ เชนเซ‹เชฏ ยฑband เชตเชฐเซเชคเชฎเชพเชจ เชฎเซ‚เชฒเซเชฏเซ‹เชฎเชพเช‚เชฅเซ€ เช…เช‚เชคเชฐเชพเชฒ.

เช›เซ‡เชฒเซเชฒเซ‡, เชคเชฎเซ‡ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ Vela.equal?/2 เชฌเซ‡ เช•เซ‡เชถเชจเซ€ เชธเชฐเช–เชพเชฎเชฃเซ€ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡. เชœเซ‹ เชฎเซ‚เชฒเซเชฏเซ‹ เช•เชพเชฐเซเชฏเชจเซ‡ เชตเซเชฏเชพเช–เซเชฏเชพเชฏเชฟเชค เช•เชฐเซ‡ เช›เซ‡ equal?/2 เช…เชฅเชตเชพ compare/2, เชชเช›เซ€ เช† เชตเชฟเชงเซ‡เชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชธเชฐเช–เชพเชฎเชฃเซ€ เชฎเชพเชŸเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡, เช…เชจเซเชฏเชฅเชพ เช†เชชเชฃเซ‡ เชฎเซ‚เชฐเซเช–เชคเชพเชชเซ‚เชฐเซเชตเช• เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช ==/2.

เชฎเซ‚เชฒเซเชฏเซ‹ เชฎเซ‡เชณเชตเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช

เชตเชฐเซเชคเชฎเชพเชจ เชธเซเชฅเชฟเชคเชฟเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เช•เซ‰เชฒเชฟเช‚เช—เชฅเซ€ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡ Vela.purge/1, เชœเซ‡ เช…เชชเซเชฐเชšเชฒเชฟเชค เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ‡ เช›เซ‡ (เชœเซ‹ validator เช–เซเชฌ เชฅเชพเช•เซ€ เช—เชฏเซ‹ timestamps). เชชเช›เซ€ เชคเชฎเซ‡ เช•เซ‰เชฒ เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ Vela.slice/1เชœเซ‡ เชชเชฐเชค เช†เชตเชถเซ‡ keyword เช•เซ€ เชคเชฐเซ€เช•เซ‡ เชชเช‚เช•เซเชคเชฟเชจเชพ เชจเชพเชฎเซ‹ เช…เชจเซ‡ เชชเซเชฐเชฅเชฎ, เชตเชพเชธเซเชคเชตเชฟเช• เชฎเซ‚เชฒเซเชฏเซ‹ เชธเชพเชฅเซ‡.

เชคเชฎเซ‡ เชชเชฃ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ get_in/2/pop_in/2 เชฆเชฐเซ‡เช• เชชเช‚เช•เซเชคเชฟเชฎเชพเช‚ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ€ เชจเชฟเชฎเซเชจ-เชธเซเชคเชฐเชจเซ€ เชเช•เซเชธเซ‡เชธ เชฎเชพเชŸเซ‡.

เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ

Vela เชœเซ‡เชตเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชธเซเชฅเชฟเชคเชฟเชฎเชพเช‚ เชธเชฎเชฏ เชถเซเชฐเซ‡เชฃเซ€ เช•เซ‡เชถ เชคเชฐเซ€เช•เซ‡ เช…เชคเซเชฏเช‚เชค เช‰เชชเชฏเซ‹เช—เซ€ เชฅเชˆ เชถเช•เซ‡ เช›เซ‡ GenServer/Agent. เช…เชฎเซ‡ เช•เซเชฏเชพเชฐเซ‡เชฏ เชตเชพเชธเซ€ เช…เชญเซเชฏเชพเชธเช•เซเชฐเชฎ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ€เช เช›เซ€เช, เช…เชจเซ‡ เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชซเช•เซเชค เชฐเชพเชœเซเชฏเชจเซ€ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชธเชพเชฅเซ‡ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เชฐเชพเช–เซ€เช เช›เซ€เช Vela, เชจเซ€เชšเซ‡ เชฆเชฐเซเชถเชพเชตเซ‡เชฒ เชฎเชพเชจเซเชฏเช•เชฐเซเชคเชพ เชธเชพเชฅเซ‡.

@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
  do: Rate.age(rate) < @death_age

ะธ Vela.purge/1 เชœเซเชฏเชพเชฐเซ‡ เชชเชฃ เช…เชฎเชจเซ‡ เชกเซ‡เชŸเชพเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซเชฏเชพเชฐเซ‡ เชถเชพเช‚เชคเชฟเชฅเซ€ เชคเชฎเชพเชฎ เชตเชพเชธเซ€ เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชฆเซ‚เชฐ เช•เชฐเซ‡ เช›เซ‡. เชตเชพเชธเซเชคเชตเชฟเช• เชฎเซ‚เชฒเซเชฏเซ‹เชจเซ‡ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชซเช•เซเชค เช•เซ‰เชฒ เช•เชฐเซ€เช เช›เซ€เช Vela.slice/1, เช…เชจเซ‡ เชœเซเชฏเชพเชฐเซ‡ เช•เซ‹เชฐเซเชธเชจเซ‹ เชจเชพเชจเซ‹ เช‡เชคเชฟเชนเชพเชธ (เชธเชฎเช—เซเชฐ เชถเซเชฐเซ‡เชฃเซ€) เชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ เชซเช•เซเชค - เชชเชนเซ‡เชฒเชพเชฅเซ€ เชœ เชธเซ‰เชฐเซเชŸ เช•เชฐเซ‡เชฒ - เชฎเชพเชจเซเชฏ เชฎเซ‚เชฒเซเชฏเซ‹ เชธเชพเชฅเซ‡ เชชเชฐเชค เช•เชฐเซ€เช เช›เซ€เช.

เชนเซ‡เชชเซ€ เชŸเชพเชˆเชฎ เชธเซ€เชฐเซ€เช เช•เซ‡เชถเซ€เช‚เช—!

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹