#printf #ocaml
#printf #ocaml
Вопрос:
API модуля Printf детализирует флаги преобразования типов, среди которых:
%B: convert a boolean argument to the string true or false
%b: convert a boolean argument (deprecated; do not use in new programs).
Но в нем не говорится, почему %b
он устарел. Почему %B
лучше, чем %b
?
Комментарии:
1. Потому что в большинстве других языков, которые поддерживают форматирование в стиле printf,
%b
, если это что-то значит, означает печать двоичного файла (строка из 0 и 1)?2. @ChrisDodd согласно документации, которую я нашел, это ничего не значит в (стандартном) C или C , означает экранированную строку в bash и логическое значение для java. По-видимому, Python использует
b
, но внутри пользовательской директивы форматирования, с{x:b}
которой вряд ли можно спутать%b
. Я нашел упоминание о%b
for binary в Perl, но здесь%B
есть квази-синоним (в итоге0bxxxxx...
получается or0Bxxxxx...
), поэтому я не вижу веской причины отдавать предпочтение одному над другим. По крайней мере, сейчас: конечно, все могло быть по-другому, когда%b
он был устаревшим в OCaml.
Ответ №1:
Люди официально ответили бы так: преобразования с заглавными буквами типа %C
и %S
(не %c
и %s
) печатают вещи в анализируемых форматах с помощью OCaml. За %b
%B
этим последовало изменение на , поскольку оно печатает логические значения как true
и false
, которые также можно анализировать OCaml.
Вы можете найти предысторию здесь: http://caml.inria.fr/mantis/view.php?id=1438 . Была ветка, которая представила это %B
, а затем изменила значение %b
двоичных файлов for . Последнее нарушило обратную совместимость, поэтому эта часть была отклонена. В результате сегодня у нас есть два преобразования для логических %B
значений и %b
.