በፊንቴክ፣ ብዙ ጊዜ በጣም ግዙፍ የሆነ የምንዛሪ ተመን መረጃን ማካሄድ አለብን። ከተለያዩ ምንጮች መረጃዎችን እናገኛለን፣ እና እያንዳንዳቸው ለነገ፣ ከነገ ወዲያ፣ ከሚቀጥለው ወር እና ሌላው ቀርቶ ለሚቀጥሉት ሶስት አመታት የምንዛሪ ዋጋዎችን እንዴት ማውጣት እንደሚቻል የራሳቸው ሀሳብ አላቸው። አንድ ሰው ተመኖችን መተንበይ ቢችል ብቻ ቀኝ, ንግዱን ለመዝጋት እና ልክ እንደ ሞኝነት ገንዘብን ወደ ኋላ እና ወደ ፊት ለመለወጥ ጊዜው አሁን ነው. አንዳንድ ምንጮች የበለጠ አስተማማኝ ናቸው ፣ አንዳንዶቹ ሙሉ ቆሻሻዎችን ያቀርባሉ ፣ ከሞላ ጎደል ትክክለኛ እሴቶች ጋር ፣ ግን ለየት ያሉ ጥንዶች። የእኛ ስራ እነዚህን በአስር ሺዎች የሚቆጠሩ እሴቶችን በሰከንድ ማጣራት እና ለደንበኞች ምን ማሳየት እንዳለበት መወሰን ነው። ልክ እንደ ፍላሚንጎ በምሳ ሰዓት እንደሚያደርጉት ትክክለኛውን ዋጋ ከብዙ ቶን ቆሻሻ እና ደለል ማጣራት አለብን።
የፍላሚንጎን ልዩ መለያ ባህሪ ከውሃ ወይም ከጭቃ የሚያጣሩበት ግዙፍ ወደ ታች የተጠማዘዘ ምንቃራቸው ነው።
-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
, ምዕራፍ ተመልከት ማነጻጸር ከታች
ማረጋገጫው ከተሳካ፣ እሴቱ በተዛማጅ ቁልፍ ስር ወደ ዝርዝሩ ይታከላል፣ ካልሆነ ግን tuple {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
, እና የትምህርቱ ትንሽ ታሪክ በሚያስፈልግበት ጊዜ (ሙሉው ተከታታይ), በቀላሉ እንመለሳለን - ቀድሞውኑ ተደርድሯል - በተረጋገጡ እሴቶች.
መልካም ጊዜ ተከታታይ መሸጎጫ!
ምንጭ: hab.com