Co oznacza podkreślenie w wektorze wiążącym let, więc jeśli napiszę to, co to jest podkreślenie w miejscu słowa kluczowego?Jaki jest pożytek z podkreślenia w formie wiążącej Clojure?
Odpowiedz
Podkreślenie jest uniwersalnym symbolem ignorowania.
Musi być zwrócona wartość dla każdego seksu w formularzu let, a println
zwraca zero, więc możesz ustawić ją na _
, aby powiedzieć ludziom, że ignorujesz powrót i po prostu robisz debugowanie w tym momencie. na przykład
(let [foo (+ 1 2)
_ (println "debug! foo is" foo)
_ (println "more debug!" (+ 1 foo)]
foo)
każda ocena s-wyrażenie ustawia _
wartości zwracane, ale nie jest to konieczne, tak po prostu czytać je jako takie.
świetnie, dziękuję. Czy to tylko ze względu na wypełnianie przestrzeni i debugowanie? - – amirteymuri
Tak, tylko efekty uboczne –
Uwaga dotycząca terminologii: _ nie jest wartością, jest symbolem. (class (quote _)) zwraca clojure.lang.Symbol Symbole muszą być cytowane lub otrzymują wartość eVALUE (klasa _) zwróci klasę wartości, do której aktualnie przypisane jest podkreślenie. – JBiserkov
podkreślenia jest poprawnym identyfikatorem symbol, jak widać przez ten przykładowy kod:
(let [_ 1]
(println _))
=> 1
Umownie, gdy masz identyfikator nie będzie cię wykorzystuje może korzystanie _
, ale to nie jest obowiązkowe.
Happens zarówno efektem ubocznym sytuacji jak w próbce (w przypadku linii println
zwraca nil
więc nie będzie wiążący swój wynik Symbol)
dzieje się również na sytuacji rozpad, gdzie nie potrzebuję niektórych wartości.
(let [[a _ _ d] [1 2 3 4]]
(println a))
=> 1
W tym przypadku nie jesteś zainteresowany w 2. i 3. wartości, więc identyfikator _
jest idiomatyczne dla mówiąc nie obchodzi.
W zwykłym Clojure podkreślenie _
jest traktowane jak każdy inny symbol (np. "Śmieci"). Ma jednak szczególne znaczenie w niektórych bibliotekach. Na przykład w Datomic _
jest traktowany jak "wieloznacznik", który zapobiega wiązaniu/unifikacji. W clojure.core.match, _
jest również traktowany jako symbol wieloznaczny.
Zob
świetnie, dziękuję. Czy to tylko ze względu na wypełnianie przestrzeni i debugowanie? – amirteymuri
Myślę, że możesz tak powiedzieć –
- 1. Jaki jest pożytek z System.in.read()?
- 2. Jaki jest pożytek z typedef?
- 3. Jaki jest pożytek z __RequestVerificationToken?
- 4. Jaki jest pożytek z window.external?
- 5. Jaki jest pożytek z AtomicReferenceArray?
- 6. jaki jest pożytek z MemoryFile w Androidzie
- 7. Jaki jest pożytek z Invoke() w .net?
- 8. Jaki jest pożytek z posiadania? w java
- 9. Jaki jest pożytek z performSelector w iOS
- 10. Jaki jest pożytek z $ # w Bash
- 11. Jaki jest pożytek z Deployment.Current.Dispatcher.BeginInvoke (() => {...})?
- 12. Jaki jest pożytek z -fno-stack-protector?
- 13. Jaki jest pożytek ze składni: =?
- 14. Jaki jest pożytek z zestawów wyświetlacza iCloud?
- 15. Jaki jest pożytek z tokena przeciw fałszerstwu?
- 16. Jaki jest pożytek z rozliczenia udevadm?
- 17. jaki jest pożytek z metody Long.reverse (długiej)?
- 18. Jaki jest pożytek z style = "clear: both"?
- 19. Jaki jest pożytek z Array.prototype.slice.call (array, 0)?
- 20. Jaki jest pożytek z DECIMAL (x, 0)?
- 21. Jaki jest pożytek z ^: dynamic na defonce?
- 22. Jaki jest pożytek z adnotacją Hibernate @LazyCollection
- 23. Jaki jest pożytek z pliku entitlements.plist?
- 24. Semafor - Jaki jest pożytek z początkowego liczenia?
- 25. Jaki jest pożytek z - [NSUserDefaults registerDefaults:]?
- 26. Jaki jest pożytek z "echo || true"?
- 27. Jaki jest pożytek z konstruktora w klasie abstrakcyjnej w php
- 28. Jaki pożytek z "końców" w tych dniach?
- 29. Jaki jest pożytek z udostępnionej zmiennej w VB.NET?
- 30. Jaki jest pożytek z etykiety worka w Hibernate?
tutaj jest bardziej conceret przykład: 'user => (powiedzmy, [A (stosowanie 5 (zakres)) {: Klucze [BCD ]: lub {d 10 b 20 c 30}} {: c 50: d 100} [efg & h] ["a" "b" "c" "d" "e"] _ (println "Byłem tutaj! ") foo 12 bar (+ foo 100)] [a b c d e f g h foo bar]) Byłem tu! [(0 1 2 3 4) 20 50 100 "a" "b" "c" ("d" "e") 12 112] ' – amirteymuri