Diskuze: Fsharp události
Člen
Zobrazeno 9 zpráv z 9.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
Ahoj, nejdřív bych to přepsal do názornější podoby, správně by to mělo bejt celý na jednom řádku:
Event.add (fun s -> lbl.Text <- s)
Event.map (sprintf " Count: %d")
Event.scan (+) 0
Event.merge
(Event.map (fun _ -> +1) btnUp.Clicked)
(Event.map (fun _ -> -1) btnDown.Clicked)
Jednoduše se to dá popsat tak, že se tlačítkům přiřadí funkce na
handlování eventů, pak se spojí, pak se kumuluje výsledek z každého
volání, k tomu se přilepí "count", a pak se to vypíše do labelu.
Tyto všechny metody jsou popsané na https://msdn.microsoft.com/…e340422.aspx , já osobně jsem
je do teď neznal.
Díky za přepis a odkaz, ale právě funkce Event.scan mi není o moc
jasnější
A to ani s pomocí
MSDN
Mně osobně se tenhle
zápis strašně moc líbí, mimo jiné proto, že v obvyklých jazycích není
možnej.
Začne to na nule a při každým volání toho eventu to přičte hodnotu, co
to dostane - v tomhle případě 1 nebo -1, po přičtení to "uloží" na
příště a vratí tu hodnotu. V podstatě nějak takle:
let Event.Scan f seed =
//f dostane (+), coz se chova jako (fun a b -> a + b)
let a = seed
//rekneme, ze sem se nam to vrati z toho eventu, nevim, jak se to spravne dela
a <- f a Event.Callback()
a
Snad už je to jasnější. Jestli ne, rád upřesním.
Právě jsem dostal nápad, jak by se to dalo vysvětlit přesněji, ale musel
bych se nad tím zamyslet, jestli to takle ještě není úplně jasný, tak to
dotáhnu k dokonalosti a správnosti.
Zápis se mi také líbí.
Opravdu ti ten tvůj kód funguje?
let a = seed
a <- f a Event.Callback()
a binduješ jako immutable a v dalším řádku se ho snažíš změnit. Ale třeba mi něco uniká.
Budu rád za každý srozumitelný příklad. Díky 
Jsem si celkem jistej, že to nefunguje, to měl bejt jenom náznak, snažil
jsem se to napsat v tom komentu nad tím.
Zapoměl jsem mutable, moje chyba. Takle by to mělo bejt lepší, kdyby to
mělo bejt funkční, tak by bylo potřeba použít něco na styl struktury,
třídy nebo refu:
let Event.Scan f seed = //deklarace jako Event.Scan taky nefunguje
let mutable a = seed
(fun b -> a <- f a b; b)//mutable proměnná se nedá capturnout, takže tohle taky nefunguje
Princip spočívá v tom, že se uloží počáteční hodnota a při každém zavolání se na ni a hodnotu vrácenou tím handlerem o úroveň níž zavolá funkce (+), takže se postupně přičítá nebo odečítá podle toho, jak jsou mačkána tlačítka.
Díval jsem se na své nejoblíbenější stránky o F# a našel jsem tam toto:
http://fsharpforfunandprofit.com/…cy-reactive/
Později na to mrknu. Ale díky za objasnění. Budu si to muset vyzkoušet,
až pochopím, jak v Xamarinu funguje GTK 
Mimochodem, co myslíš tím, že "mutable proměnná se nedá capturnout?"
Když je proměnná použita uvnitř nonymní funkce, tak se musí udržovat i potom, co vlákno opustí daný blok kódu.
Zobrazeno 9 zpráv z 9.
