- Справка.
- Загрузите библиотеку строк и попробуйте использовать верхний регистр.
- Импортируйте имя библиотеки под псевдонимом с помощью :as
- Вызывайте функции напрямую с помощью :refer [function-name].
- Примеры ошибок
- Импортируйте все функции с помощью :refer и :all
- Используйте функцию dir от repl, чтобы вывести все содержимое строковой функции.
- Резюме
Справка.
https://clojure.org/guides/repl/basic_usage#_example_using_clojure_string
Официальные учебники по Clojure
Строчная часть basic-usage.
Загрузите библиотеку строк и попробуйте использовать верхний регистр.
Снова используйте команду clj для запуска CLI в терминале
( require '[clojure.string])
(clojure.string/upper-case "abCd")
"ABCD"
В отличие от вычислений чисел, вам нужно вызвать библиотеку с помощью require
Аналогично использованию Django REST Framework и терминала
Но в отличие от JS и PY, вы не можете использовать одинарные кавычки, например, ‘library/detail’.
Нет единого цитирования. Только начало. Нет конца.
Начинается бесконечная битва, возможно, в этом и заключается смысл.
https://stackoverflow.com/a/34118964
Это было не так, это был просто символ пространства имен.
И импортированная библиотека с require и функциями в ней.
Аргументы обрабатываются так, как если бы они были четырьмя арифметическими операциями. Но всегда найдется один аргумент!
Импортируйте имя библиотеки под псевдонимом с помощью :as
(require '[clojure.string :as customName])
(customName/upper-case "hoge")
"HOGE"
Имена библиотек можно импортировать под любым именем, используя :as
.
Изменения имен функций не ожидается.
Вызывайте функции напрямую с помощью :refer [function-name].
(require '[clojure.string :refer [upper-case]])
(upper-case "toUpperCaseOnly")
"TOUPPERCASEONLY"
Используя :refer [function-name]
, вы можете
Функционирует только в библиотеке
Функции в библиотеке можно использовать как функции (+,-) в четырех арифметических операциях.
Примеры ошибок
(upper-case "toUpperCaseOnly" "second value" "Third Value")
Execution error (ArityException) at user/eval17 (REPL:1).
Несколько аргументов не могут быть обработаны вместе.
(upper-case 'single')
"SINGLE'"
В отличие от JS, одинарные кавычки не рассматриваются как строка.
Похож ли он на : (двоеточие) тем, что его нельзя заключить в рамку?
Импортируйте все функции с помощью :refer и :all
(upper-case "quote")
Syntax error compiling at (REPL:1:1).
Unable to resolve symbol: upper-case in this context
user=> (require '[clojure.string :refer :all])
WARNING: reverse already refers to: #'clojure.core/reverse in namespace: user, being replaced by: #'clojure.string/reverse
WARNING: replace already refers to: #'clojure.core/replace in namespace: user, being replaced by: #'clojure.string/replace
nil
user=> (upper-case "quote")
"QUOTE"
Можно ли использовать :all для импорта всех функций?
Они уже загружены? Лучше не использовать :all, так как он перезапишет обратную и замещающую части ядра.
Функцию :all не рекомендуется использовать слишком часто, поскольку она перезаписывает функции reverse и replace ядра.
Используйте функцию dir от repl, чтобы вывести все содержимое строковой функции.
(require '[clojure.repl :refer :all])
(dir clojure.string)
blank?
capitalize
ends-with?
escape
includes?
index-of
join
last-index-of
lower-case
re-quote-replacement
replace
replace-first
reverse
split
split-lines
starts-with?
trim
trim-newline
triml
trimr
upper-case
Если использовать функцию dir в repl для выстраивания всех функций внутри строки, то можно получить следующие результаты
JS знаком
- присоединяйтесь к
- спрайт
- обратный
- заменить
- отделка
- заканчивается
и так далее.
Кстати, библиотека им.
apropos, find-doc, doc, вы можете искать функции и документы
source join)
(defn ^String join
"Returns a string of all elements in coll, as returned by (seq coll),
separated by an optional separator."
{:added "1.2"}
([coll]
(apply str coll))
([separator coll]
(loop [sb (StringBuilder. (str (first coll)))
more (next coll)
sep (str separator)]
(if more
(recur (-> sb (.append sep) (.append (str (first more))))
(next more)
sep)
(str sb)))))
source можно использовать для просмотра фактического исходного кода функции.
Семейство Lisp, слишком много для исследователей!
Резюме
( require '[clojure.string] )
Вы можете импортировать библиотеки таким образом, а затем
( clojure.string/upper-case "abCd" )
Указывая имя библиотеки и имя функции в ней
Строка может быть строкой аргументов.
Вы не можете использовать ' "
» для строки, только " "
«.
Только двойные.
Если вы забыли, какая функция была в строке, вы можете перечислить ее в repl/dir.
Если вы забыли, вы можете использовать repl/dir для вывода списка.
Что такое верхний регистр?
Если вы забыли, что такое верхний регистр, вы можете использовать repl/doc для вывода описания.
Если вы используете repl/source, вы можете даже вывести код реализации.
Основание. Это гораздо удобнее, чем Python для терминальных расчетов.