Как стать автором
Обновить

Объединяем Websockets, Lisp и функциональное программирование

Время на прочтение10 мин
Количество просмотров6.5K
Всего голосов 9: ↑8 и ↓1+7
Комментарии4

Комментарии 4

Ремарка: ключевое слово(clojure keyword) :dependencies.

Насколько я помню и понимаю, в данном контексте это не "ключевое слово" (для кложуры и лисп-подобных языков вообще не характерно понятия ключевых слов — есть функции, макросы ну и конструкции вроде списков, векторов, хешмапов...), а скорее просто ключ хешмапы =)


Аналогией в java было бы


Map<String, Integer> m = new HashMap<>();

m.put("some", -2);

Здесь "some" — и есть этот самый ключ. А new — ключевое слово.


Самое близкое к ключам кложуры, что приходит на ум — символы в руби. Они выполняют схожую роль.


Ремарка: middleware ring-defaults

Вообще не понял для чего эта ремарка.


В общей сложности получилось немного сумбурно и в основном — просто набор кусков кода для тех, "кто в теме". Задача с самого начала не особо ясна, каждый шаг тоже не особо понятно для чего делается...

Спасибо, учту. В следующий раз постараюсь озвучить цель вначале более прозрачно, и вынести наверх.

просто набор кусков кода для тех, «кто в теме»

вероятно вы правы, это скорее для тех «кто в теме». Собственно вначале я упомянул про это, сказав что не хотел бы делать экскурс. Не ставил задачу писать tutorial. Но я все равно приму к сведению, спасибо.

а скорее просто ключ хешмапы

Отображения (hash-maps) могут использовать в качестве ключей любые хэшируемые значения
(def stringmap {"a" 1, "b" 2, "c" 3})

Самое близкое к ключам кложуры, что приходит на ум — символы в руби

Если говорить о том что это, то это прежде всего структура данных языка. Если хотите, то по смыслу это напоминает строковые контанты. Но и разница все таки есть. В Clojure есть именно keywords, и есть symbols. Скажем
(def :kword "25") ;; CompilerException java.lang.RuntimeException: First argument to def must be a Symbol
, пример с символом

(def kword "25") ;; #'user/kword - валидный код namespace/symbol
(println kword) ;; "25"
(println :kword) ;; :kword
;; keywords, в отличие от symbols не привязаны к пространствам имен 
;; пока это не сделать явно.
(namespace :foo) ;; nil
(namespace ::foo) ;; "user"
(class :kword) ;; clojure.lang.Keyword
(symbol? :kword) ;; false
;; могут использоваться в роли функций
(def keymap {:a 1 :b 2})
(:a keymap) ;; 1

Использовал термин «ключевое слово» только лишь в контексте перевода «keyword» и возможно этим, просто сбил вас с толку. Не хотелось «сыпать» англицизмами. Это примерно как вы выше использовали «хеш-мапы», а я употребил термин «отображения».
Но еще раз спасибо за замечания.

Спасибо за обоснованный ответ! Действительно, в большинстве случаев — привычная терминология, не более.

Совершенно верно.
В Clojure keyword — это специфичный тип данных, который реализуется сам в себя (Keywords are symbolic identifiers that evaluate to themselves), и их действительно очень удобно использовать в качестве ключа в хешмапах (и не только). Так что технически здесь keyword — ключевое слово, но используемый термин не соответствует понятию ключевых слов в других языках. :)
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации