เจตเฉ‡เจฒเจพ โ†’ เจธเจฎเจพเจ‚ เจฒเฉœเฉ€ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจฒเจˆ เจธเจฎเจพเจฐเจŸ เจ•เฉˆเจธเจผ

เจซเจฟเจจเจŸเฉ‡เจ• เจตเจฟเฉฑเจš, เจธเจพเจจเฉ‚เฉฐ เจ…เจ•เจธเจฐ เจฎเฉเจฆเจฐเจพ เจเจ•เจธเจšเฉ‡เจ‚เจœ เจฐเฉ‡เจŸ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจ•เจพเจซเจผเฉ€ เจตเฉฑเจกเฉ‡ เจตเฉ‹เจฒเจฏเฉ‚เจฎ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจเฉ€ เจชเฉˆเจ‚เจฆเฉ€ เจนเฉˆเฅค เจ…เจธเฉ€เจ‚ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฐเฉ‹เจคเจพเจ‚ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚, เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจนเจฐเฉ‡เจ• เจฆเจพ เจ†เจชเจฃเจพ เจตเจฟเจšเจพเจฐ เจนเฉˆ เจ•เจฟ เจ•เฉฑเจฒเฉเจน, เจ…เจ—เจฒเฉ‡ เจฆเจฟเจจ, เจ…เจ—เจฒเฉ‡ เจฎเจนเฉ€เจจเฉ‡ เจ…เจคเฉ‡ เจ‡เฉฑเจฅเฉ‹เจ‚ เจคเฉฑเจ• เจ•เจฟ เจ…เจ—เจฒเฉ‡ เจคเจฟเฉฐเจจ เจธเจพเจฒเจพเจ‚ เจฒเจˆ เจเจ•เจธเจšเฉ‡เจ‚เจœ เจฆเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจเจ•เจธเจŸเจฐเจพเจชเฉ‹เจฒเฉ‡เจŸ เจ•เจฐเจจเจพ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจ•เฉ‹เจˆ เจตเจฟเจ…เจ•เจคเฉ€ เจฆเจฐเจพเจ‚ เจฆเฉ€ เจญเจตเจฟเฉฑเจ–เจฌเจพเจฃเฉ€ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆ เจธเฉฑเจœเฉ‡, เจ‡เจน เจ•เจพเจฐเฉ‹เจฌเจพเจฐ เจจเฉ‚เฉฐ เจฌเฉฐเจฆ เจ•เจฐเจจ เจ…เจคเฉ‡ เจธเจฟเจฐเจซเจผ เจฎเฉ‚เจฐเจ–เจคเจพ เจจเจพเจฒ เจชเฉˆเจธเฉ‡ เจจเฉ‚เฉฐ เจ…เฉฑเจ—เฉ‡ เจ…เจคเฉ‡ เจชเจฟเฉฑเจ›เฉ‡ เจฌเจฆเจฒเจฃ เจฆเจพ เจธเจฎเจพเจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ. เจ•เฉเจ เจธเจฐเฉ‹เจค เจตเจงเฉ‡เจฐเฉ‡ เจญเจฐเฉ‹เจธเฉ‡เจฎเฉฐเจฆ เจนเฉเฉฐเจฆเฉ‡ เจนเจจ, เจ•เฉเจ เจฒเจ—เจญเจ— เจธเจนเฉ€ เจฎเฉเฉฑเจฒเจพเจ‚ เจฆเฉ‡ เจฆเฉเจฐเจฒเฉฑเจญ เจธเฉฐเจฎเจฟเจฒเจจเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจชเฉ‚เจฐเจพ เจ•เฉ‚เฉœเจพ เจธเจชเจฒเจพเจˆ เจ•เจฐเจฆเฉ‡ เจนเจจ, เจชเจฐ เจตเจฟเจฆเฉ‡เจธเจผเฉ€ เจœเฉ‹เฉœเจฟเจ†เจ‚ เจฒเจˆเฅค เจธเจพเจกเจพ เจ•เฉฐเจฎ เจชเฉเจฐเจคเฉ€ เจธเจ•เจฟเฉฐเจŸ เจ‡เจนเจจเจพเจ‚ เจนเจœเจผเจพเจฐเจพเจ‚ เจฎเฉเฉฑเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจ–เฉ‹เจœเจฃเจพ เจ…เจคเฉ‡ เจ‡เจน เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจเจพ เจนเฉˆ เจ•เจฟ เจ—เจพเจนเจ•เจพเจ‚ เจจเฉ‚เฉฐ เจ…เจธเจฒ เจตเจฟเฉฑเจš เจ•เฉ€ เจฆเจฟเจ–เจพเจ‰เจฃเจพ เจนเฉˆเฅค เจธเจพเจจเฉ‚เฉฐ เจŸเจจเจพเจ‚ เจ—เฉฐเจฆเจ—เฉ€ เจ…เจคเฉ‡ เจ—เจพเจฆ เจคเฉ‹เจ‚ เจ‡เฉฑเจ• เจธเจนเฉ€ เจฎเฉเฉฑเจฒ เจจเฉ‚เฉฐ เจซเจฟเจฒเจŸเจฐ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจซเจฒเฉ‡เจฎเจฟเฉฐเจ—เฉ‹ เจฆเฉเจชเจนเจฟเจฐ เจฆเฉ‡ เจ–เจพเจฃเฉ‡ เจตเจฟเฉฑเจš เจ•เจฐเจฆเฉ‡ เจนเจจเฅค

เจตเฉ‡เจฒเจพ โ†’ เจธเจฎเจพเจ‚ เจฒเฉœเฉ€ เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจฒเจˆ เจธเจฎเจพเจฐเจŸ เจ•เฉˆเจธเจผ

เจซเจฒเฉ‡เจฎเจฟเฉฐเจ—เฉ‹ เจฆเฉ€ เจ‡เฉฑเจ• เจตเจฟเจธเจผเฉ‡เจธเจผ เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจตเจฟเจธเจผเจพเจฒ เจนเฉ‡เจ เจพเจ‚ เจตเฉฑเจฒ เจตเจ•เจฐ เจ•เฉ€เจคเฉ€ เจšเฉเฉฐเจ เจนเฉˆ, เจœเจฟเจธ เจจเจพเจฒ เจ‰เจน เจชเจพเจฃเฉ€ เจœเจพเจ‚ เจšเจฟเฉฑเจ•เฉœ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจญเฉ‹เจœเจจ เจจเฉ‚เฉฐ เจซเจฟเจฒเจŸเจฐ เจ•เจฐเจฆเฉ‡ เจนเจจเฅค
 - เจตเจฟเจ•เฉ€

เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฆเจพ เจœเจจเจฎ เจนเฉ‹เจ‡เจ† 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

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹