Π ΡΠΈΠ½ΡΠ΅Ρ Π΅ Π½Π°ΠΌ ΡΠ°ΡΡΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π½ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΌΡ Π΄Π°Π½Π½ΡΡ ΠΊΡΡΡΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π° Π²Π°Π»ΡΡ. ΠΡ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ², ΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π½ΠΈΡ ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΠΊΡΡΡΠ°ΠΏΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΊΡΡΡΠΎΠ² Π½Π° Π·Π°Π²ΡΡΠ°, ΠΏΠΎΡΠ»Π΅Π·Π°Π²ΡΡΠ°, ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΠΌΠ΅ΡΡΡ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠΈ Π³ΠΎΠ΄Π°. ΠΡΠ»ΠΈ Π±Ρ ΠΊΡΠΎ-ΡΠΎ ΡΠΌΠ΅Π» ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ ΠΊΡΡΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, Π²ΠΏΠΎΡΡ Π±ΡΠ»ΠΎ Π±Ρ Π·Π°ΠΊΡΡΠ²Π°ΡΡ Π±ΠΈΠ·Π½Π΅Ρ ΠΈ ΠΏΡΠΎΡΡΠΎ ΡΡΠΏΠΎ ΠΌΠ΅Π½ΡΡΡ Π΄Π΅Π½ΡΠ³ΠΈ ΡΡΠ΄Π°-ΡΡΠ΄Π°. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΈ ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π±ΠΎΜΠ»ΡΡΠΈΠΌ Π΄ΠΎΠ²Π΅ΡΠΈΠ΅ΠΌ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²Π»ΡΡΡ ΡΠΏΠ»ΠΎΡΡ ΠΌΡΡΠΎΡ, Ρ ΡΠ΅Π΄ΠΊΠΈΠΌΠΈ Π²ΠΊΡΠ°ΠΏΠ»Π΅Π½ΠΈΡΠΌΠΈ ΠΏΠΎΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, Π½ΠΎ Π·Π°ΡΠΎ Π΄Π»Ρ ΡΠΊΠ·ΠΎΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠ°Ρ. ΠΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎΠ±Ρ ΠΏΡΠΎΡΠ΅ΡΡΡ ΡΡΠΈ Π΄Π΅ΡΡΡΠΊΠΈ ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π·Π°ΠΊΠ°Π·ΡΠΈΠΊΠ°ΠΌ. ΠΠ°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΡΠΎΠ½Π½Ρ Π³ΡΡΠ·ΠΈ ΠΈ ΠΈΠ»Π°, ΠΊΠ°ΠΊ ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ ΡΠ»Π°ΠΌΠΈΠ½Π³ΠΎ Π½Π° ΠΎΠ±Π΅Π΄Π΅.
ΠΡΠΎΠ±ΡΠΌ ΠΎΡΠ»ΠΈΡΠΈΡΠ΅Π»ΡΠ½ΡΠΌ ΠΏΡΠΈΠ·Π½Π°ΠΊΠΎΠΌ ΡΠ»Π°ΠΌΠΈΠ½Π³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²Π½ΡΠΉ Π²ΡΠ³Π½ΡΡΡΠΉ Π²Π½ΠΈΠ· ΠΊΠ»ΡΠ², Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΠ½ΠΈ ΡΠΈΠ»ΡΡΡΡΡΡ ΠΏΠΈΡΡ ΠΈΠ· Π²ΠΎΠ΄Ρ ΠΈΠ»ΠΈ ΠΈΠ»Π°.
Β βΒΠΠΈΠΊΠΈ
Π’Π°ΠΊ ΡΠΎΠ΄ΠΈΠ»Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Vela
ΠΠΎΠΏΡΡΡΠΈΠΌ, ΠΌΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΠΌ ΠΊΡΡΡΡ Π΄Π»Ρ ΡΡΠ΅Ρ
ΠΏΠ°Ρ Π²Π°Π»ΡΡ. ΠΡΠΎΡΡΠ΅ΠΉΡΠ΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ 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
, ΡΠΌ. Π³Π»Π°Π²ΠΊΡ Comparison Π½ΠΈΠΆΠ΅.
ΠΡΠ»ΠΈ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ ΠΏΡΠΎΡΠ»Π° ΡΡΠΏΠ΅ΡΠ½ΠΎ, Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΡΡΡ Π² ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ΄ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΠΊΠ»ΡΡΠΎΠΌ, Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΊΠΎΡΡΠ΅ΠΆ {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
, Π° ΠΊΠΎΠ³Π΄Π° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠ°Ρ ΠΈΡΡΠΎΡΠΈΡ ΠΏΠΎ ΠΊΡΡΡΡ (Π²Π΅ΡΡ ΡΡΠ΄ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ), ΠΌΡ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌ Π΅Π³ΠΎΒ β ΡΠΆΠ΅ ΠΎΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΒ β Ρ ΠΏΡΠΎΠ²Π°Π»ΠΈΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ.
Π£Π΄Π°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ΅ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΡΡΠ΄ΠΎΠ²!
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com