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"Полезное
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"Полезное
Ваше упражнение проверяется по этим тестам
(ns str-format-test
(:require [test-helper :refer [assert-solution]]
[index :refer [number-presenter]]))
(assert-solution
[[63] [14] [2]]
["decimal 63 octal 77 hex 3f upper-case hex 3F"
"decimal 14 octal 16 hex e upper-case hex E"
"decimal 2 octal 2 hex 2 upper-case hex 2"]
number-presenter)Решение учителя откроется через:
20:00
