2017-07-17 25 views
6

Co to jest wbudowany sposób Clojure (jeśli istnieje), aby utworzyć pojedynczy wpis mapy?Tworzenie wpisu mapy w Clojure

Innymi słowy, chciałbym coś takiego jak (map-entry key value). Innymi słowy, wynik powinien być mniej więcej równoważny z (first {key value}).

Uwagi:

  • Oczywiście, ja już próbowałem googlowania i tylko znaleźć map-entry? Jednak dokument ten nie ma powiązanych zasobów.
  • Wiem, że (first {1 2}) zwraca [1 2], który wydaje się być wektorem. Jednakże:
(class (first {1 2})) 
; --> clojure.lang.MapEntry 
(class [1 2]) 
; --> clojure.lang.PersistentVector 
  • Sprawdziłem w kodzie źródłowym i jestem świadomy, że zarówno MapEntry i PersistentVector przedłużyć APersistentVector (tak MapEntry jest bardziej lub mniej również wektor). Pozostaje jednak pytanie, czy mogę utworzyć instancję MapEntry z kodu Clojure.
  • Ostatni, ale nie najmniej ważny: "nie, nie ma wbudowanego w to sposobu w Clojure" jest również poprawną odpowiedzią (co, jak podejrzewam, jest prawdą, po prostu chcę się upewnić, że przypadkowo nie przeoczyłem czegoś).

Odpowiedz

7

„nie, nie ma zbudowany w sposób to zrobić w Clojure” jest również ważna odpowiedź

Tak, niestety to jest odpowiedź. Powiedziałbym, że najlepiej można zrobić jest zdefiniowanie map-entry funkcję siebie:

(defn map-entry [k v] 
    (clojure.lang.MapEntry/create k v)) 
3

prostu podać nazwę klasy następująco

(clojure.lang.MapEntry. "key" "val")