เดธเดฎเดฏ เดธเต€เดฐเต€เดธเดฟเดจเตเด‚ เด…เดคเดฟเดฒเต‡เดฑเต† เด•เดพเดฐเตเดฏเด™เตเด™เตพเด•เตเด•เตเดฎเดพเดฏเดฟ Vela โ†’ เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดพเดทเต†

เดซเดฟเตปเดŸเต†เด•เตเด•เดฟเตฝ, เด•เดฑเตปเดธเดฟ เดตเดฟเดจเดฟเดฎเดฏ เดจเดฟเดฐเด•เตเด•เต เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดตเดณเดฐเต† เดตเดฒเดฟเดฏ เด…เดณเดตเตเด•เตพ เดžเด™เตเด™เตพ เดชเดฒเดชเตเดชเต‹เดดเตเด‚ เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต. เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดค เดธเตเดฐเต‹เดคเดธเตเดธเตเด•เดณเดฟเตฝ เดจเดฟเดจเตเดจเต เดžเด™เตเด™เตพเด•เตเด•เต เดกเดพเดฑเตเดฑ เดฒเดญเดฟเด•เตเด•เตเดจเตเดจเต, เด…เดตเดฏเตโ€Œเด•เตเด•เต เด“เดฐเต‹เดจเตเดจเดฟเดจเตเด‚ เดจเดพเดณเต†, เดจเดพเดณเดคเตเดคเต† เดชเดฟเดฑเตเดฑเต‡เดจเตเดจเต, เด…เดŸเตเดคเตเดค เดฎเดพเดธเด‚, เด…เดŸเตเดคเตเดค เดฎเต‚เดจเตเดจเต เดตเตผเดทเดคเตเดคเต‡เด•เตเด•เตเดณเตเดณ เดตเดฟเดจเดฟเดฎเดฏ เดจเดฟเดฐเด•เตเด•เตเด•เตพ เดŽเด™เตเด™เดจเต† เดŽเด•เตโ€Œเดธเตโ€ŒเดŸเตเดฐเดพเดชเต‹เดณเต‡เดฑเตเดฑเต เดšเต†เดฏเตเดฏเดพเด‚ เดŽเดจเตเดจเดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเตเดตเดจเตเดคเด‚ เด†เดถเดฏเดฎเตเดฃเตเดŸเต. เด†เตผเด•เตเด•เต†เด™เตเด•เดฟเดฒเตเด‚ เดจเดฟเดฐเด•เตเด•เตเด•เตพ เดชเตเดฐเดตเดšเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เด™เตเด•เดฟเตฝ เดถเดฐเดฟ, เดฌเดฟเดธเดฟเดจเดธเตเดธเต เด…เดตเดธเดพเดจเดฟเดชเตเดชเดฟเด•เตเด•เดพเดจเตเด‚ เดฎเดฃเตเดŸเดคเตเดคเดฐเดฎเดพเดฏเดฟ เดชเดฃเด‚ เด…เด™เตเด™เต‹เดŸเตเดŸเตเด‚ เด‡เด™เตเด™เต‹เดŸเตเดŸเตเด‚ เดฎเดพเดฑเตเดฑเดพเดจเตเดฎเตเดณเตเดณ เดธเดฎเดฏเดฎเดพเดฃเดฟเดคเต. เดšเดฟเดฒ เดธเตเดฐเต‹เดคเดธเตเดธเตเด•เตพ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเตเดตเดธเดจเต€เดฏเดฎเดพเดฃเต, เดšเดฟเดฒเดคเต เดชเต‚เตผเดฃเตเดฃเดฎเดพเดฏ เดฎเดพเดฒเดฟเดจเตเดฏเด™เตเด™เตพ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต, เดเดคเดพเดฃเตเดŸเต เดถเดฐเดฟเดฏเดพเดฏ เดฎเต‚เดฒเตเดฏเด™เตเด™เดณเตเดŸเต† เด…เดชเต‚เตผเดต เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเดฒเตเด•เตพ, เดŽเดจเตเดจเดพเตฝ เดตเดฟเดฆเต‡เดถ เดฆเดฎเตเดชเดคเดฟเด•เตพเด•เตเด•เต. เด’เดฐเต เดธเต†เด•เตเด•เตปเดกเดฟเตฝ เดชเดคเดฟเดจเดพเดฏเดฟเดฐเด•เตเด•เดฃเด•เตเด•เดฟเดจเต เดฎเต‚เดฒเตเดฏเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเดšเตเดšเต เด‰เดชเดญเต‹เด•เตเดคเดพเด•เตเด•เตพเด•เตเด•เต เด•เตƒเดคเตเดฏเดฎเดพเดฏเดฟ เดŽเดจเตเดคเดพเดฃเต เด•เดพเดฃเดฟเด•เตเด•เต‡เดฃเตเดŸเดคเต†เดจเตเดจเต เดจเดฟเตผเดฃเตเดฃเดฏเดฟเด•เตเด•เตเด• เดŽเดจเตเดจเดคเดพเดฃเต เดžเด™เตเด™เดณเตเดŸเต† เดœเต‹เดฒเดฟ. เด‰เดšเตเดšเดญเด•เตเดทเดฃ เดธเดฎเดฏเดคเตเดคเต เด…เดฐเดฏเดจเตเดจเด™เตเด™เตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเตเดชเต‹เดฒเต†, เดŸเตบ เด•เดฃเด•เตเด•เดฟเดจเต เด…เดดเตเด•เตเด•เดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เดšเต†เดณเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเตเด‚ เดจเดฎเตเด•เตเด•เต เดถเดฐเดฟเดฏเดพเดฏ เดฎเต‚เดฒเตเดฏเด‚ เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต.

เดธเดฎเดฏ เดธเต€เดฐเต€เดธเดฟเดจเตเด‚ เด…เดคเดฟเดฒเต‡เดฑเต† เด•เดพเดฐเตเดฏเด™เตเด™เตพเด•เตเด•เตเดฎเดพเดฏเดฟ Vela โ†’ เดธเตเดฎเดพเตผเดŸเตเดŸเต เด•เดพเดทเต†

เด…เดฐเดฏเดจเตเดจเด™เตเด™เดณเตเดŸเต† เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดธเดตเดฟเดถเต‡เดทเดค เดคเดพเดดเต‡เดฏเตโ€Œเด•เตเด•เต เดตเดณเดžเตเดž เดตเดฒเดฟเดฏ เด•เตŠเด•เตเด•เต เด†เดฃเต, เด…เดต เดตเต†เดณเตเดณเดคเตเดคเดฟเตฝ เดจเดฟเดจเตเดจเต‹ เดšเต†เดณเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต‹ เดญเด•เตเดทเดฃเด‚ เดซเดฟเตฝเดŸเตเดŸเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.
 - เดตเดฟเด•เตเด•เดฟ

เด…เด™เตเด™เดจเต† เดฒเตˆเดฌเตเดฐเดฑเดฟ เดชเดฟเดฑเดจเตเดจเต 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, เด…เดงเตเดฏเดพเดฏเด‚ เด•เดพเดฃเตเด• เด…เดŸเตเด•เตเด•เตเดจเตเดจเต เดคเดพเดดเต†);
  • เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เด…เดจเตเดธเดฐเดฟเดšเตเดšเต เดตเดฐเดฟ เดŸเตเดฐเดฟเด‚ เดšเต†เดฏเตเดฏเตเด‚ :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

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•