Vela → huna huna no ka manawa a me nā mea hou aku

I ka fintech, pono mākou e hana pinepine i ka nui o nā ʻikepili hoʻololi kālā. Loaʻa iā mākou ka ʻikepili mai nā kumu like ʻole, a loaʻa i kēlā me kēia o lākou kona manaʻo ponoʻī pehea e hoʻonui ai i nā kumukūʻai no ka lā ʻapōpō, ka lā ma hope o ka lā ʻapōpō, ka mahina aʻe a me nā makahiki ʻekolu e hiki mai ana. Inā hiki i kekahi ke wānana i nā kumukūʻai pololei, ʻo ia ka manawa e pani ai i ka ʻoihana a hoʻololi naʻaupō wale i ke kālā i hope a i waho. ʻOi aku ka hilinaʻi o kekahi mau kumu, hoʻolako kekahi i nā ʻōpala piha, me nā hoʻokomo ʻokoʻa ʻole o nā kumu kūpono, akā no nā kāne exotic. ʻO kā mākou hana ka kānana ʻana i kēia mau ʻumi tausani o nā waiwai i kēlā me kēia kekona a hoʻoholo i ka mea e hōʻike pono ai i nā mea kūʻai aku. Pono mākou e kānana i ka waiwai kūpono hoʻokahi mai nā tona o ka lepo a me ka lepo, e like me ka flamingos i ka ʻaina awakea.

Vela → huna huna no ka manawa a me nā mea hou aku

ʻO kahi hiʻohiʻona ʻokoʻa o nā flamingo ko lākou nuku nui i lalo i lalo, kahi e kānana ai lākou i ka meaʻai mai ka wai a i ʻole ka lepo.
 - ʻO Wiki

Pēlā i hānau ʻia ai ka hale waihona puke Vela, ka mea e mālama i kahi cache mokuʻāina no nā waiwai he nui i nā manawa manawa i kuhikuhi ʻia. Ma lalo o ka puʻupuʻu, kānana ia i nā ʻikepili maikaʻi ʻole a me ka wā kahiko ma ka lele, a hāʻawi pū i ke komo i nā mea hou loa N nā waiwai i hoʻopaʻa ʻia no kēlā me kēia kī (nā pālua kālā, i kā mākou hihia).

E ʻōlelo mākou e hōʻiliʻili mākou i nā uku no nā paʻa kālā ʻekolu. ʻO ka wehewehe maʻalahi loa Vela no ka mālama ʻana i ke kūlana o kēia manawa e like me kēia:

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

Hoʻohou Waiwai

Vela.put/3 E hana ka hana i kēia ma ke kaʻina:

  • e kumu validator ma ka waiwai, inā wehewehe ʻia kekahi (e nānā i ka mokuna Hōʻoia lalo);
  • e hoʻohui i ka waiwai i ka lālani o nā waiwai maikaʻi inā kūleʻa ka hōʻoia ʻana, a i ʻole ka lālani lawelawe :__errors__ i ole ia;
  • e hoʻokaʻawale ʻia inā sorter i wehewehe ʻia no kahi kī i hāʻawi ʻia, a i ʻole e kau wale i ka waiwai ma ke poʻo o ka papa inoa (LIFO, e nana mokuna Kōkua lalo);
  • e ʻoki i ka lālani e like me ka palena :limit i hala ma luna o ka hana ʻana;
  • e hoʻihoʻi i ka hale hou 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]}

Eia kekahi Vela mea hana Access, no laila hiki iā ʻoe ke hoʻohana i kekahi o nā hana maʻamau no ka hoʻonui hohonu ʻana i nā hale mai ka arsenal e hoʻonui i nā waiwai. Kernel: Kernel.get_in/2, Kernel.put_in/3, Kernel.update_in/3, Kernel.pop_in/2, a Kernel.get_and_update_in/3.

Hōʻoia

Hiki ke wehewehe ʻia kahi validator penei:

  • hana waho me hoʻokahi pane (&MyMod.my_fun/1), e loaʻa wale ka waiwai no ka hōʻoia;
  • ka hana o waho me nā manaʻo ʻelua, &MyMod.my_fun/2, e loaʻa iā ia kahi pālua serie, value no ka hooiaio ana;
  • hoʻokō module Vela.Validator;
  • hoʻohālikelike hoʻonohonoho threshold, a - ke koho - compare_by, e nana mokuna Hoʻohālikelike ma lalo.

Inā kūleʻa ka hōʻoia, hoʻohui ʻia ka waiwai i ka papa inoa ma lalo o ke kī pili; a i ʻole, ka tuple {serie, value} hele i :__errors_.

Kūlike

ʻO nā waiwai i mālama ʻia ma kēia mau lālani hiki ke lilo i kekahi mea. E ao aku Vela e hoʻohālikelike iā lākou, pono e hoʻololi compare_by parameter i ka wehewehe moʻo (inā ʻaʻole hiki ke hoʻohālikelike ʻia nā waiwai me ka maʻamau Kernel.</2); pono ke ʻano o kēia ʻāpana (Vela.value() -> number()). Ma ka paʻamau he maʻalahi & &1.

Eia kekahi, hiki iā ʻoe ke hāʻawi i kahi ʻāpana i ka wehewehe ʻana i ka lālani comparator e helu i nā waiwai delta (min/max); laʻana, ma ka hoʻouna ʻana Date.diff/2 ma ke ʻano he mea hoʻohālikelike, hiki iā ʻoe ke kiʻi i nā delta kūpono no nā lā.

ʻO kekahi ala kūpono e hana ai ʻo ia ke kau ʻana i kahi ʻāpana threshold, ka mea e wehewehe ana i ka lakio o ka waiwai hou i {min, max} waena. No ka mea, ua kuhikuhi ʻia ʻo ia ma ke ʻano he pākēneka, ʻaʻole hoʻohana ka māka comparatorakā hoʻohana mau compare_by. No ka laʻana, no ke kuhikuhi ʻana i kahi waiwai paepae no nā manawa lā, pono ʻoe e kuhikuhi compare_by: &DateTime.to_unix/1 (no ka loaʻa ʻana o ka helu helu helu) a threshold: 1, e ʻae ʻia nā waiwai hou inā aia lākou i loko ±band kaawale mai na waiwai o keia manawa.

ʻO ka hope, hiki iā ʻoe ke hoʻohana Vela.equal?/2 e hoohalike i na huna huna elua. Inā wehewehe nā waiwai i kahi hana equal?/2 ai ole ia, compare/2, a laila e hoʻohana ʻia kēia mau hana no ka hoʻohālikelike, inā ʻaʻole mākou e hoʻohana naʻaupō ==/2.

Loaʻa nā waiwai

Hoʻomaka maʻamau ka hana ʻana i ke kūlana o kēia manawa me ke kelepona ʻana Vela.purge/1, ka mea e wehe i nā waiwai kahiko (inā validator nakinaki ia timestamps). Hiki iā ʻoe ke kelepona Vela.slice/1e hoi mai ana keyword me nā inoa lālani e like me nā kī a me ka mua, nā waiwai maoli.

Hiki iā ʻoe ke hoʻohana get_in/2/pop_in/2 no ka loaʻa haʻahaʻa haʻahaʻa i nā waiwai i kēlā me kēia lālani.

Ka hoʻohana

Vela Hiki ke hoʻohana nui ʻia e like me ka cache moʻo manawa i kahi kūlana kaʻina like GenServer/Agent. ʻAʻole makemake mākou e hoʻohana i nā waiwai papa, a no ka hana ʻana i kēia, mālama mākou i ke kaʻina hana me ka hoʻokele mokuʻāina Vela, me ka mea hōʻoia i hōʻike ʻia ma lalo nei.

@impl Vela.Validator
def valid?(_key, %Rate{} = rate),
  do: Rate.age(rate) < @death_age

и Vela.purge/1 wehe mālie i nā waiwai stale i kēlā me kēia manawa e pono ai mākou i ka ʻikepili. No ke komo ʻana i nā waiwai maoli mākou e kāhea wale ai Vela.slice/1, a ke koi ʻia kahi moʻolelo liʻiliʻi o ka papa (ka moʻo holoʻokoʻa), hoʻihoʻi wale mākou - ua hoʻonohonoho ʻia - me nā waiwai i hōʻoia ʻia.

Hauʻoli manawa hoʻoheheʻe kaʻa!

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka