Say tworzę Mailbox
użyciu mailbox = Signal.mailbox Action
, gdzie type Action = Blah
, później mogę wysłać działań do tej mailbox
wykorzystaniem Signal.send mailbox.address Blah
, to pozwala mi słuchać na mailbox.signal
, w jaki sposób? W końcu typ Mailbox
jest tylko aliasem {address : Signal.Address Action, signal : Signal.Signal Action}
, ponieważ jest to wiąz, że istnieje tylko jeden sygnał dla określonego typu, więc w powyższym scenariuszu nie muszę przypisywać wiązowi wiązania się z mailbox.signal
z mailbox.address
, wiąz wyłoni się sam ze względu na zgodność jeden-do-jednego między adresem i sygnałem określonego typu?Elm: jak działa Mailbox?
Odpowiedz
Możliwość umieszczania w skrzynce pocztowej wysyłanych przez nią zdarzeń jest w całości oparta na "magii", czyli jest implementowana natywnie (w JavaScript), a nie czymś, co można zaimplementować samodzielnie. Dlatego jest wbudowany w standardowe biblioteki.
Tworzenie skrzynki pocztowej jest imperatywną, skuteczną akcją (cii, nie mów nikomu). Więc jeśli użyjesz:
mailbox1 = Signal.mailbox Blah
mailbox2 = Signal.mailbox Blah
te dwie skrzynki pocztowe będą odrębne. Wyślij wiadomość na numer mailbox2.address
spowoduje wyświetlenie komunikatu na mailbox2.signal
, ale nie będzie to mailbox1.signal
. To przełamuje przejrzystość referencyjną, która jest zła, ale na razie nie wszystko zepsuje. (Może to zaszaleć do stycznej, ale ponieważ potrzebna jest Signal
dla wyjścia i nie może mieć Signal (Signal something)
, w praktyce niezarządzany efekt tworzenia skrzynki pocztowej nie psuje rzeczy). Ten "wyciek" zostanie naprawiony w pewnym momencie w przyszłości. Była już propozycja, ale duże zmiany są wystawiane w różnych wersjach językowych.
- 1. Importuj wiadomość e-mail z AD Mailbox
- 2. Przesyłanie plików w Elm
- 3. Elm: Jak dekodować dane z JSON API
- 4. Jak stworzyć Dict in Elm do testowania?
- 5. Jak wyodrębnić wyniki żądań HTTP w Elm
- 6. Array vs listy w Elm
- 7. Dlaczego Elm używa operatora "++" do łączenia łańcuchów?
- 8. Problem kompilacji Elm-Brunch: "split" nieokreślonego
- 9. Czy można prowadzić aplikację Elm z istniejącą nawigacją zbudowaną poza aplikacją Elm?
- 10. Elm - Włącz Msg w Cmd Msg
- 11. Czy Elm mieć równowartość Haskell w „Czytaj”
- 12. Czy Elm ma równowartość Haskell jako deseń
- 13. Jak wysłać JSON pomiędzy Klientem Elm i Haskell (jesod) Serwer
- 14. $ parser.unshift ?? jak to działa?
- 15. W Elm, dlaczego jest to niedopasowanie typu Int-Float?
- 16. Haskell lub Elm błąd: nieznany klucz publiczny OID
- 17. Co to jest poprawny sposób inicjowania aplikacja Elm
- 18. Rozszerzanie formularz poradnik aplikację Elm zawierać numerowany wejściowy Wiek
- 19. W jaki sposób Elm porównuje się do ClojureScript?
- 20. Jak działa ta funkcja javascript/Struktura działa
- 21. Jak działa aktywacja oprogramowania?
- 22. Jak działa plik .RGS?
- 23. Jak działa System.Threading.Monitor.Enter()?
- 24. Jak działa CorFlags.exe/32BIT +?
- 25. Jak działa Pex?
- 26. Jak działa .insert?
- 27. Jak działa rejestracja domeny?
- 28. Jak działa pobieranie HTTP?
- 29. Jak działa OpenID?
- 30. OpenGL - Jak działa przezroczystość?
Jeśli wywołanie 'Signal.mailbox' dwukrotnie tworzy dwie różne skrzynki pocztowe, w jaki sposób działa kod w [Communicating with Mailboxes] (http://elm-lang.org/guide/reactivity), czyli' Signal.send contentMailbox. adres "cześć!" "działa? Ponieważ 'contentMailbox' jest wywoływany po raz drugi, powinien utworzyć inny sygnał, który nie jest tym, który jest używany w' main = Signal.map show contentMailbox.signal', gdzie jest nazywany po raz pierwszy, a zatem _ "hello" _ powinien nie wyświetla się? – RAbraham