Clojure: Форматирование строк

В программировании часто возникает задача собрать строку из значений, которые не являются строками сами по себе. Для решения подобных задач применяют форматирование (formatting) строк (оно же — "строковая интерполяция"). В Clojure рассмотрим самые популярные

Функции format и printf

Функции format и printf ожидают в качестве первого аргумента строку-шаблон и несколько значений, которые будут в этот шаблон подставлены. Разница же между функциями в том, что вызов format вычисляется в строку, а printf сразу выводит значение на экран (результатом же вычисления будет nil). Шаблон может содержать произвольный текст, в нужные места которого вставлены последовательности (подробности в классе java.util.Formatter). Вот несколько примеров применения format:

(format "Hello there, %s" "bob")
; => "Hello there, bob"
(format "%5d" 3)
; => "    3"
(format "Pad with leading zeros %07d" 5432)
; => "Pad with leading zeros 0005432"
(format "Left justified :%-7d:" 5432)
; => "Left justified :5432   :"
(format "decimal %d  octal %o  hex %x  upper-case hex %X" 63 63 63 63)
; => "decimal 63  octal 77  hex 3f  upper-case hex 3F"
(format "%.3f" 2.0)
; => "2.000"
(format "%.3f" (double (/ 5 2)))
; => "2.500"

Задание

Реализуйте функцию number-presenter, которая представляет число в нескольких форматах. Примеры:

(number-presenter 63)
; => "decimal 63  octal 77  hex 3f  upper-case hex 3F"
(number-presenter 14)
; => "decimal 14  octal 16  hex e  upper-case hex E"
Как с вами связаться? 🙃

Команда проекта находится в телеграм-сообществе по ссылке https://ttttt.me/HexletLearningBot. Там можно задать любой вопрос и повлиять на проект

Упражнение не проходит проверку — что делать? 😶

Если вы зашли в тупик, то самое время поговорить с нашим асситентом Тота во вкладке "Обсуждение". Как правильно задать вопрос:

В моей среде код работает, а здесь нет 🤨

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

Мой код отличается от решения учителя 🤔

Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи. В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.

Прочитал урок — ничего не понятно 🙄

Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в обратной связи нашего сообщества

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются

Привет! Я Тота и моя задача помочь в обучении. Чтобы активировать меня, нужно зарегистрироваться или залогиниться, если у вас уже есть аккаунт

Loading...

Ваше упражнение проверяется по этим тестам

1(ns str-format-test
2  (:require [test-helper :refer [assert-solution]]
3            [index :refer [number-presenter]]))
4
5(assert-solution
6 [[63] [14] [2]]
7 ["decimal 63  octal 77  hex 3f  upper-case hex 3F"
8  "decimal 14  octal 16  hex e  upper-case hex E"
9  "decimal 2  octal 2  hex 2  upper-case hex 2"]
10 number-presenter)
11

Решение учителя откроется через:

20:00
waiting_clock