2014-04-15 18 views
8

Nie mam na myśli tego jako subiektywnego pytania - staram się zrozumieć, dlaczego dokładnie with-meta jest w języku. Zdaję sobie sprawę, że można go używać do wielu celów (tak może być eval, ale jego użycie poza określonymi okolicznościami jest oznaką złego projektu). Z punktu widzenia projektu, jaki jest cel zastosowania struktury metadanych Clojure? Czy to przede wszystkim dokumentacja? Czy to cukier?Clojure Best Practice: Kiedy używać metadanych?

Jakie są niektóre silne aplikacje dla with-meta/meta? W jakich przypadkach jest to zły pomysł? Czy możesz podać przykład użycia metadanych do zrobienia czegoś, co bez niego byłoby niemożliwe/trudne/żmudne?

Odpowiedz

5

Kilka podstawowych funkcji języka zależą metadanych:

  • makr jedna cecha, która zależy od metadanych. Makro jest funkcją z odrobiną metadanych, która powoduje, że funkcja działa podczas kompilacji.

    user> (meta #'when) 
    
    {:macro true, 
    :ns #<Namespace clojure.core>, 
    :name when, :arglists ([test & body]), 
    :column 1, :added "1.0", 
    :doc "Evaluates test. If logical true, evaluates body in an implicit do.", 
    :line 471, 
    :file "clojure/core.clj"} 
    
  • Rodzaje to kolejna funkcja języka zależna od metadanych. Typ czegoś jest wyrażony jako metadane na tym obiekcie.

  • Testy

    również używają metadanych. kiedy ty (lub lein) zadzwonisz pod numer run-tests, wyszukuje metadane dotyczące funkcji w każdym obszarze nazw, aby znaleźć te, które są testami.

Istnieje wiele przypadków, począwszy od rdzenia języka podobnego rodzaju rzeczy peryferyjnych, takich jak n-repl/Cydr prezentujących argumenty funkcyjne na dole ekranu podczas pracy, że metadane użytkowego. Nie jest to zapach wzorcowy do używania metadanych, pod warunkiem, że nie używasz go do robienia brzydkich rzeczy oczywiście;)

+0

Czy ktoś wie, jak zrobić kod na liście punktorów, pojawia się we właściwym bloku kodu? –

+0

Musisz wprowadzić wcięcie z 4 dodatkowymi odstępami i umieścić pustą linię między tekstem punktu wypunktowania i kodem. – danneu

+2

Z szacunkiem @ArthurUlfeldt, w tej odpowiedzi brakuje mięsa! Opowiedz mi o tych brzydkich rzeczach? –

Powiązane problemy