ΠΡΠ² ΡΠΈΠ½ΡΠ΅Ρ ΡΠ΅ΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΠΌΠ΅ Π΄ΠΎΡΡΠ° ΠΎΠ³ΡΠΎΠΌΠ½ΠΈ ΠΎΠ±Π΅ΠΌΠΈ ΠΎΡ Π΄Π°Π½Π½ΠΈ Π·Π° Π²Π°Π»ΡΡΠ½ΠΈΡΠ΅ ΠΊΡΡΡΠΎΠ²Π΅. ΠΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ ΠΈ Π²ΡΠ΅ΠΊΠΈ ΠΎΡ ΡΡΡ ΠΈΠΌΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π° ΠΈΠ΄Π΅Ρ ΠΊΠ°ΠΊ Π΄Π° Π΅ΠΊΡΡΡΠ°ΠΏΠΎΠ»ΠΈΡΠ° ΠΎΠ±ΠΌΠ΅Π½Π½ΠΈΡΠ΅ ΠΊΡΡΡΠΎΠ²Π΅ Π·Π° ΡΡΡΠ΅, Π²Π΄ΡΡΠ³ΠΈΠ΄Π΅Π½, ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡ ΠΌΠ΅ΡΠ΅Ρ ΠΈ Π΄ΠΎΡΠΈ ΡΠ»Π΅Π΄Π²Π°ΡΠΈΡΠ΅ ΡΡΠΈ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Π‘Π°ΠΌΠΎ Π°ΠΊΠΎ Π½ΡΠΊΠΎΠΉ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ΠΈ ΠΊΡΡΡΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ, ΡΠ΅ Π΅ Π²ΡΠ΅ΠΌΠ΅ Π΄Π° Π·Π°ΡΠ²ΠΎΡΠΈΡΠ΅ Π±ΠΈΠ·Π½Π΅ΡΠ° ΠΈ ΠΏΡΠΎΡΡΠΎ Π³Π»ΡΠΏΠ°Π²ΠΎ Π΄Π° ΠΎΠ±ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΠ°ΡΠΈ Π½Π°ΠΏΡΠ΅Π΄-Π½Π°Π·Π°Π΄. ΠΡΠΊΠΎΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ ΡΠ° ΠΏΠΎ-Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΈ, Π½ΡΠΊΠΎΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΡ ΠΏΡΠ»Π΅Π½ Π±ΠΎΠΊΠ»ΡΠΊ, Ρ ΡΠ΅Π΄ΠΊΠΈ Π²ΠΊΠ»ΡΡΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΠΎΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ, Π½ΠΎ Π·Π° Π΅ΠΊΠ·ΠΎΡΠΈΡΠ½ΠΈ Π΄Π²ΠΎΠΉΠΊΠΈ. ΠΠ°ΡΠ°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π΅ Π΄Π° ΠΏΡΠ΅ΡΠ΅Π΅ΠΌ ΡΠ΅Π·ΠΈ Π΄Π΅ΡΠ΅ΡΠΊΠΈ Ρ ΠΈΠ»ΡΠ΄ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ Π² ΡΠ΅ΠΊΡΠ½Π΄Π° ΠΈ Π΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠΎΡΠ½ΠΎ Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° ΠΊΠ»ΠΈΠ΅Π½ΡΠΈΡΠ΅. Π’ΡΡΠ±Π²Π° Π΄Π° ΡΠΈΠ»ΡΡΠΈΡΠ°ΠΌΠ΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΎΡ ΡΠΎΠ½ΠΎΠ²Π΅ ΠΌΡΡΡΠΎΡΠΈΡ ΠΈ ΡΠΈΠ½Ρ, ΡΠΎΡΠ½ΠΎ ΠΊΠ°ΠΊΡΠΎ ΡΠ»Π°ΠΌΠΈΠ½Π³ΠΎΡΠΎ ΠΏΡΠ°Π²ΡΡ Π½Π° ΠΎΠ±ΡΠ΄.
ΠΡΠΎΠ±Π΅Π½Π° ΠΎΡΠ»ΠΈΡΠΈΡΠ΅Π»Π½Π° ΡΠ΅ΡΡΠ° Π½Π° ΡΠ»Π°ΠΌΠΈΠ½Π³ΠΎΡΠΎ Π΅ ΠΌΠ°ΡΠΈΠ²Π½ΠΈΡΡ ΠΈΠΌ ΠΈΠ·Π²ΠΈΡ Π½Π°Π΄ΠΎΠ»Ρ ΠΊΠ»ΡΠ½, Ρ ΠΊΠΎΠΉΡΠΎ ΡΠΈΠ»ΡΡΠΈΡΠ°Ρ Ρ ΡΠ°Π½Π°ΡΠ° ΠΎΡ Π²ΠΎΠ΄Π° ΠΈΠ»ΠΈ ΠΊΠ°Π».
-Wiki
Π’Π°ΠΊΠ° ΡΠ΅ ΡΠ°ΠΆΠ΄Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° 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
, ΠΠΈΠΆΡΠ΅ ΠΠ»Π°Π²Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎ-Π΄ΠΎΠ»Ρ.
ΠΠΊΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΡΠ° Π΅ ΡΡΠΏΠ΅ΡΠ½Π°, ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ ΠΊΡΠΌ ΡΠΏΠΈΡΡΠΊΠ° ΠΏΠΎΠ΄ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ ΠΊΠ»ΡΡ; Π² ΠΏΡΠΎΡΠΈΠ²Π΅Π½ ΡΠ»ΡΡΠ°ΠΉ ΠΊΠΎΡΡΠ΅ΠΆΡΡ {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
Π·Π° Π΄ΠΎΡΡΡΠΏ Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ Π΄ΠΎ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈΡΠ΅ Π²ΡΠ² Π²ΡΠ΅ΠΊΠΈ ΡΠ΅Π΄.
App
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