Jaki byłby przykładowy scenariusz, w którym io! blok byłby używany w Clojure? Mam problemy ze zrozumieniem jego celu.Jakie jest praktyczne zastosowanie urządzenia io! blok w Clojure?
Odpowiedz
Jest częścią systemu STM dla ensuring that code related to IO is not used inside STM transactions. Ponieważ clojure będzie ponawiać próbę transakcji, jeśli inny wątek będzie zawierał sprzeczne dane podczas wykonywania transakcji, każde zamówienie IO wytworzone przez tę transakcję byłoby fałszywe, ponieważ reprezentuje stan pamięci, który może być odrzucona.
Jeśli spojrzysz na [źródło] (https://github.com/clojure/clojure/blob/clojure-1.9.0-alpha14/src/clj/clojure/core.clj#L2485), zobaczysz, że po prostu wyrzuca wyjątek, jeśli transakcja jest w toku, w przeciwnym razie wykonuje ciało w normalny sposób. –
Jest to pomocne, ale abstrakcyjne. Przykładowy scenariusz, w którym faktycznie go użyjesz: powiedz, że piszesz pakiet z niektórymi funkcjami, które obsługują IO, niektóre znane użytkownikowi, niektóre nieznane użytkownikowi. używaj '(io! & body)' we wszystkich z nich do rzucania i błędów, jeśli są używane w niebezpieczny sposób (tj. w ramach transakcji) – jaimedash
pracują w clojure od ostatnich siedmiu lat profesjonalnie i nigdy nie widzieli, jak był używany , więc nie przychodzą na myśl żadne popularne przykłady. –
- 1. jakie jest praktyczne zastosowanie System.Transactions?
- 2. Praktyczne zastosowanie backticks w Swift
- 3. Czy istnieje praktyczne zastosowanie wskaźnika "volatile restrict"?
- 4. Jakie jest zastosowanie ::: (potrójne dwukropek) w Scala
- 5. Jakie jest zastosowanie klonującego interfejsu w java?
- 6. Jakie są praktyczne zastosowania XOR w algorytmach
- 7. jakie jest właściwe zastosowanie dyrektywy CMake "project"
- 8. jakie jest podstawowe zastosowanie programu equort_storage?
- 9. Czy istnieją jakieś praktyczne zastosowanie „void” struktury w .NET
- 10. Jakie są praktyczne zastosowania wzoru metody Factory?
- 11. Jakie są praktyczne ograniczenia wątków na procesor?
- 12. Jakie jest zastosowanie w klasach/statycznych metodach w ruby?
- 13. Jakie zastosowanie ma if_/3?
- 14. jakie jest zastosowanie ramy, szyby lub panelu w ruchu?
- 15. Jakie jest zastosowanie ram IoC w aplikacji MVC?
- 16. Jakie jest zastosowanie warstwy trwałości w dowolnej aplikacji?
- 17. Clojure: Jak używać urządzenia w testowaniu
- 18. Clojure - zastosowanie funkcji do wektora wektorów
- 19. Praktyczne przykłady zastosowania dla nowego some- Clojure za> makro
- 20. Jakie jest główne zastosowanie NSAssert Vs. Wyjątek NSE
- 21. Użyj urządzenia audio IO do przetwarzania głosu w iOS
- 22. Praktyczne zastosowanie faktu, że operator przyrostowy prefiksu C++ zwraca wartość l
- 23. Jakie są przełomowe zmiany w clojure 1.3?
- 24. Ćwiczenia praktyczne?
- 25. Jakie są praktyczne zastosowania algorytmów najniższego wspólnego przodka?
- 26. jQuery .each() - Zastosowania praktyczne?
- 27. Jakie jest właściwe zastąpienie urządzenia PreeConInterceptor Resteasy 3.X?
- 28. Testowanie urządzenia Clojure w locie w oddzielnej ramce
- 29. Praktyczne zastosowania typu dynamiczny Scala
- 30. Jakie są niektóre zastosowania metadanych Clojure?
Nigdy go nie używano, ale wydaje się, że jest to sposób egzekwowania, że funkcja/kod nie jest używana w transakcji. – Carcigenicate
Interesujące pytanie ... Zrobiłem szybkie wyszukiwanie listy mailingowej, znalazłem [jeden wątek] (https://groups.google.com/d/msg/clojure/ZZP93tVmot4/DoDBAlDrHmYJ) i [inny] (https: // grupy .google.com/d/msg/clojure/TAhNp7rb2Go/Kij920UDKbwJ), a zwłaszcza [wątek, w którym został wprowadzony] (https://groups.google.com/d/msg/clojure/JRRegOOwohE/3gWZjmWClpUJ) (i [commit] (https://github.com/clojure/clojure/commit/c5e8c6f06292fab26d29cb951d8400394e0f8258)). – glts
Dzięki @glts bardzo przydatne linki. Myślę, że następujące dwie odpowiedzi podsumowują to dobrze: "Myślę, że to zatrzyma inny kod by owinąć dookoła kodu z wyraźnym wywołaniem io! Jego deklaratywny sposób powiedzenia: robię io! DONT UŻYJ mnie wewnątrz dosync." i "Chodzi o to, aby oznaczyć kod, który ma wpływ na efekt uboczny, abyś nie mógł go wykorzystać w transakcji." – Aspasia