clojure-russia

Работа и релокейт: #jobs-rus | #clojure-russia-offtop Телеграм-чат https://t.me/clojure_ru
anjensan 2017-10-23T10:03:13.000224Z

так ничего, что в хешах кложурных порядок не определен?

ilevd 2017-10-23T11:42:14.000245Z

Ну вообще, конечно, это шутка была, но по факту:

(reduce (fn [m i] 
          (let [m* (assoc m i i)]
            (prn (type m*) m*)
            m*))
        {} (range 12))
clojure.lang.PersistentArrayMap {0 0}
clojure.lang.PersistentArrayMap {0 0, 1 1}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4, 5 5}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6, 7 7}
clojure.lang.PersistentArrayMap {0 0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 6, 7 7, 8 8}
clojure.lang.PersistentHashMap {0 0, 7 7, 1 1, 4 4, 6 6, 3 3, 2 2, 9 9, 5 5, 8 8}
clojure.lang.PersistentHashMap {0 0, 7 7, 1 1, 4 4, 6 6, 3 3, 2 2, 9 9, 5 5, 10 10, 8 8}
clojure.lang.PersistentHashMap {0 0, 7 7, 1 1, 4 4, 6 6, 3 3, 2 2, 11 11, 9 9, 5 5, 10 10, 8 8}
=> {0 0, 7 7, 1 1, 4 4, 6 6, 3 3, 2 2, 11 11, 9 9, 5 5, 10 10, 8 8}

ilevd 2017-10-23T11:44:03.000166Z

https://stackoverflow.com/a/26055521

asolovyov 2017-10-23T12:40:01.000037Z

@nicola появился route-map 0.0.5 на clojars, только вообще непонятно, как определить, что там внутри 🙂

anjensan 2017-10-23T13:46:51.000452Z

думаю опечатка

dottedmag 2017-10-23T15:38:14.000333Z

@ilevd Типа, массив преобразуется в хэш-таблицу только после того, как туда набьётся 17 элементов? Вроде я что-то слышал, что Рич посчитал, что именно на 17 sweet spot для каких-то workloads.

y.khmelevskii 2017-10-23T17:02:22.000290Z

подскажите, можно внутри макроса использовать переменную не с тела этого макроса? Например, есть следующий псевдо-макрос:

(defmacro css.
  [class]
  `(str component-name "_" ~class))
он ничего не знает о переменной component-name. При его использовании, он может увидеть эту переменную в своей области видимости, например:
(def component-name "button")
(css."wrapper")
результатом будет, соответсвенно, button_wrapper такое можно сделать?

ilevd 2017-10-23T17:32:16.000108Z

@dottedmag там получается 18 элементов в массиве (9 пар ключ-значений) и если 10-ый раз assoc делать, то преобразуется в hash-map. С виду похоже на опечатку. Нехорошо, если из-за этого какая-то оптимизация не срабатывает.

ilevd 2017-10-23T17:34:37.000491Z

Хотя можно просто создать hashmap и arraymap с 9 элементами и потестить что быстрее)

dottedmag 2017-10-23T17:37:48.000546Z

@y.khmelevskii Можно, но тебя будут беспощадно материть те, кто потом будет разбираться в этом коде.

dottedmag 2017-10-23T17:43:05.000180Z

@y.khmelevskii Лучше уж тогда сделать (with-component-name "button" ...), который будет устанавливать контекст для всяких css.

y.khmelevskii 2017-10-23T17:55:51.000276Z

@dottedmag за что материть? вроде безобидный синтаксический сахар. Да, (with-component-name "button" ...) нравится больше. Остался вопрос как синтаксически это сделать 🙂

dottedmag 2017-10-23T18:12:06.000262Z

Кстати, а зачем для этого макро?

dottedmag 2017-10-23T18:12:19.000657Z

with-component-name может устанавливать динамическую переменную, и ему нужно быть макросом. А css. может читать её, будучи обычной функцией.

dottedmag 2017-10-23T18:13:48.000064Z

@y.khmelevskii (binding [*component-name* "button"] (css. "wrapper")...)

dottedmag 2017-10-23T18:13:57.000382Z

И css. будет читать *component-name*

y.khmelevskii 2017-10-23T19:13:43.000406Z

да макрос не обязателен. спасибо, буду пробовать

y.khmelevskii 2017-10-23T21:34:08.000039Z

ха, with-component-name должен оборачивать, весь код. так еще хуже, лучше уж без этого в принципе