Size: a a a

Clojure — русскоговорящее сообщество

2020 December 11

A

Alex in Clojure — русскоговорящее сообщество
Дичь конечно))
Говорят в таких случая можно использовать replace(" " "_") :)
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Alex
Дичь конечно))
Говорят в таких случая можно использовать replace(" " "_") :)
Можно еще к этому munge добавить)
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
(keyword (clojure.string/replace (munge "key with spaces and other unreadable symbols / \\ | # % ( ) { } [ ]") #" " "_"))
;;=> :key_with_spaces_and_other_unreadable_symbols__SLASH___BSLASH___BAR___SHARP___PERCENT__(_)__LBRACE___RBRACE___LBRACK___RBRACK_
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
The2lb3oz4dr10½grOfHedgehogs
(keyword (clojure.string/replace (munge "key with spaces and other unreadable symbols / \\ | # % ( ) { } [ ]") #" " "_"))
;;=> :key_with_spaces_and_other_unreadable_symbols__SLASH___BSLASH___BAR___SHARP___PERCENT__(_)__LBRACE___RBRACE___LBRACK___RBRACK_
Не. Не защищает наверняка)
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
Если попадаются кейворды с пробелами, можно пройтись через walk/postwalk c функцией
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
(fn [x] (if (keyword? x) (clean-keyword x) x))
источник

IG

Ivan Grishaev in Clojure — русскоговорящее сообщество
где clean-keyword берет name, чистит строку, а потом обратно в keyword
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Оригинальная проблема кажется была про pr-str. Вместо дополнительных хождений по структурам можно попробовать использовать https://clojuredocs.org/clojure.core/print-method
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Доопределить его для Keyword внутри чекая пробелы и все что ломает ридер
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Если кейворд нормальный - вызывать его toString
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Kirill Chernyshov
Если кейворд нормальный - вызывать его toString
А если не нормальный, то можно использовать кастомный ридер токен
#keyword "k e y"
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Да, только советую вместо строки ставить вектор чтобы покрыть кейворды с нэймспейсом
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Kirill Chernyshov
расширяя дата литералами например так #edn.invalid/keyword [“string with spaces”]
Вот так
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Kirill Chernyshov
Да, только советую вместо строки ставить вектор чтобы покрыть кейворды с нэймспейсом
Слеш внутри можно юзать
(namespace (keyword "foo/bar"))
;; => "foo"
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
Не, (keyword nil "foo/bar")
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
(defmethod print-method clojure.lang.Keyword [kw ^java.io.Writer w]
 (.write w (pr-str (tagged-literal 'kw [(namespace kw) (name kw)]))))

работает)
(pr-str (keyword nil "name with spaces")) ;; => "#kw [nil \"name with spaces\"]"
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Kirill Chernyshov
(defmethod print-method clojure.lang.Keyword [kw ^java.io.Writer w]
 (.write w (pr-str (tagged-literal 'kw [(namespace kw) (name kw)]))))

работает)
(pr-str (keyword nil "name with spaces")) ;; => "#kw [nil \"name with spaces\"]"
Мне всё-таки больше нравится без вектора, т.к. вектор может позволить более двух элементов
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
(let [kw (keyword "foo/bar/baz/quux")]
 [(namespace kw)
  (name kw)])
;; => ["foo" "bar/baz/quux"]
Строкой можно достичь всего что надо для полностью какого угодно киворда
источник

KC

Kirill Chernyshov in Clojure — русскоговорящее сообщество
да как угодно, я со своей колокольни советую )
источник

T

The2lb3oz4dr10½grOfH... in Clojure — русскоговорящее сообщество
Ага
источник