Дар fintech, мо аксар вақт бояд ҳаҷми хеле азими маълумоти қурби асъорро коркард кунем. Мо маълумотро аз сарчашмаҳои гуногун мегирем ва ҳар кадоми онҳо дар бораи чӣ гуна экстраполятсияи қурби асъор барои фардо, фардо, моҳи оянда ва ҳатто се соли оянда андешаи худро доранд. Агар касе нархҳоро пешгӯӣ карда метавонист рост, вақти он расидааст, ки тиҷоратро пӯшед ва пулро беақл иваз кунед. Баъзе манбаъҳо боэътимодтаранд, баъзеҳо партовҳои мукаммалро бо ҷузъҳои нодир бо арзишҳои қариб дуруст таъмин мекунанд, аммо барои ҷуфти экзотикӣ. Вазифаи мо аз он иборат аст, ки ин даҳҳо ҳазор арзишҳоро дар як сония гузаронем ва муайян кунем, ки ба мизоҷон чӣ нишон додан лозим аст. Мо бояд як арзиши дурустро аз тонна лой ва лой филтр кунем, ба монанди фламингоҳо дар хӯроки нисфирӯзӣ.
Хусусияти фарқкунандаи фламингоҳо нӯги азими ба поён каҷшудаи онҳост, ки бо он ғизоро аз об ё лой филтр мекунанд.
-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
барои калиди додашуда муайян карда шудааст ё танҳо арзишро дар сари рӯйхат мегузорад (ЛИФО, ба боб нигаред Sort дар поён); - сатрро мувофики параметр бурида хохад кард
: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
, ва вақте ки таърихи хурди курс талаб карда мешавад (тамоми силсила), мо онро танҳо баргардонем - аллакай мураттаб - бо арзишҳои тасдиқшуда.
Кэшкунии силсилаи вақт хушбахт!
Манбаъ: will.com