Существуют ли соглашения для печати дополнительных значений? - PullRequest
4 голосов
/ 09 августа 2011

Предположим, я хочу перегрузить operator<< для шаблона класса optional<T>.Как мне напечатать «отсутствующее значение» и как я могу напечатать «реальное значение» x?

none
some x

или

[]
[x]

Или я должен буквально ничего не печатать для первогокейс и x для второго?Как это обычно обрабатывается?

Ответы [ 6 ]

1 голос
/ 09 августа 2011

В отсутствие какого-либо контекста я мог бы рассматривать необязательный как особый случай коллекции, которая либо пуста, либо имеет один элемент.

Возможно, у вас уже есть соглашение о том, как печатать коллекцииили составные объекты, но что-то вроде {}, если оно пустое, или {x}, если оно имеет значение x, может показаться разумным.Если вы печатаете пустой вектор как none, а вектор с тремя элементами как some x y z, то непременно примените то же соглашение к необязательному типу: -)

1 голос
/ 09 августа 2011

Мне нравится опция печати None и Some x.Я думаю, что это сразу описывает, что происходит (особенно для людей, знакомых с Haskell).

Лично я бы не использовал альтернативу [] и [x], потому что многие языки используют квадратные скобки для обозначения некоторыхвроде список.Если бы я увидел этот вывод, я бы сразу подумал, что был напечатан список, в отличие от необязательного типа.

0 голосов
/ 09 августа 2011
The UNIX and the Echo.

В стране Нью-Джерси обитала UNIX, прекрасная горничная, которой исследователи путешествовали далеко, чтобы восхищаться.Ослепленные ее чистотой, все стремились раскрыть ее, одну за ее девственную грацию, другую зачищенную вежливость, еще одну за ее ловкость в выполнении трудных задач, редко выполняемых даже в гораздо более богатых странах.Она была такой душевной и любезной по природе, что в UNIX были приняты все, кроме невыносимо богатых женихов.Вскоре многие потомки росли, процветали и распространялись по краям земли.

Природа сама улыбалась и отвечала на UNIX более охотно, чем на других смертных существ.Люди-скромники, которые почти ничего не знали о придворных манерах, восхищались ее эхом, настолько точными и кристально чистыми, что едва ли верили, что ей могут ответить те же камни и леса, которые так искажали свои крики в пустыне.И уступчивая UNiX с полным откликом ответила на все вопросы, которые ей когда-либо задавали.Когда один нетерпеливый Суэйн спросил UNIX: «Ничего не эхом», UNIX с готовностью открыла рот, ничего не повторила и снова закрыла.тот?Впредь никогда не открывай рот, когда ты должен ничего не повторять!И UNIX обязался.

«Но я хочу идеального исполнения, даже когда вы ничего не повторяете, - умолял чувствительный юноша, - и от закрытого рта не может исходить эхо».Не желая никого обидеть, UNIX согласился сказать разные вещи для нетерпеливой молодежи и чувствительной молодежи.Она не назвала ничего чувствительного «\ n.»

Но теперь, когда она сказала «\ n», она на самом деле ничего не говорила, поэтому ей пришлось дважды открыть рот, один раз сказать «\ n», иоднажды ничего не сказав, и поэтому она не порадовала чувствительного юношу, который тотчас же сказал: «Для меня \ n звучит как совершенное ничто, но вторая все разрушает.Я хочу, чтобы ты забрал один из них.Таким образом, UNiX, который не мог терпеть оскорбления, согласился отменить эхо и назвал это «\ c».Теперь чувствительный юноша мог слышать совершенное эхо ничего, спрашивая «\ n» и «\ c» вместе.

Но они говорят, что он умер от избытка нотации прежде, чем он когда-либо услышал.

- Даг Макилрой

0 голосов
/ 09 августа 2011

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

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

0 голосов
/ 09 августа 2011

Это зависит от типа. Если вы хотите, чтобы строка была напечатана, это может быть "" или "Fred". Если это массив, это может быть {} или {1, 2, 3}.

После этого видео или кода, указанного на веб-странице, вам могут помочь. Симпатичный принтер

0 голосов
/ 09 августа 2011

Я не знаю каких-либо конкретных соглашений. Лично я бы напечатал (null), если значение отсутствует, а фактическое значение в противном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...