Использование хэш-карт Java в Clojure - PullRequest
0 голосов
/ 05 января 2019

Я новичок в Clojure. Я пытаюсь использовать Java HashMap в clojure. Я передаю Java-хэш-карту в Clojure. Карта - {0 = Гоа, 1 = Дели, 2 = Мумбаи}. Когда я пытаюсь использовать функции clojure на этой карте, я не получаю ожидаемый результат. В отличие от этого, когда я перебираю эту карту, она дает ожидаемый результат.

Example
   (println(get map 0)) is giving nil




(doseq [[key value] map
      (println value)) is giving the expected output.

        Output-Goa
               Delhi
               Mumbai

Может кто-нибудь объяснить мне, почему это происходит?

Ответы [ 3 ]

0 голосов
/ 05 января 2019

Вам действительно нужно немного погуглить, чтобы найти уже существующие ответы, такие как этот: Clojure: работа с java.util.HashMap идиоматическим способом Clojure

Вы можете увидеть простой ответ:

(def data {:a 1 :b 2 :c 3})

(def java-map (java.util.HashMap. data))
(def clj-map  (into {} java-map))

, что дает нам:

java-map  => <#java.util.HashMap {:b 2, :c 3, :a 1}>
clj-map   => <#clojure.lang.PersistentArrayMap {:b 2, :c 3, :a 1}>

и цикл:

  (doseq [[k v] clj-map]
    (println (format "key=%s  val=%s" k v)) )

с результатом:

key=:b  val=2
key=:c  val=3
key=:a  val=1
0 голосов
/ 06 января 2019
(def input-map {0 "Goa" 1 "Delhi" 2 "Mumbai"})

(map (fn[[k v]] (print "key " k " value " k)) input-map) 

[[k v]] для функции, позволяющей получить доступ к ключу и значению для каждой записи

(map print input-map)

здесь запись карты будет передана в качестве параметра для печати

0 голосов
/ 05 января 2019

Я думаю, что ваша проблема в том, что ваша карта называется «карта», которая также является функцией Clojure. Попробуйте это так:

(def my-map {0 "Goa" 1 "Delhi" 2 "Mumbai"})

Что тогда будет работать так:

(println (get my-map 0))

Обратите внимание, что он по-прежнему возвращает ноль, поскольку после формы (println) больше ничего нет, но он печатает значение 0 на карте, которое является "Гоа".

...