Что должен делать экранирующий символ, если следующий символ не нуждается в экранировании? - PullRequest
3 голосов
/ 06 октября 2010

В приложении, над которым я работаю, есть поле, в которое можно ввести строку.

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

Думайте о нем как о регулярном выражении: . соответствует любому символу, но \. соответствуетточка.

Что наиболее интуитивно понятно, что происходит, когда за экранирующим символом следует персонаж, которому не нужно убегать?Например, имело бы больше смысла, что:

  1. Экранирующий символ "экранирует" литерал как сам по себе: \f становится f ("экранированный f")
  2. Экранирующий символ не является экранирующим, если за ним не следует специальный символ: \f остается как \f
  3. Ошибка!Бросьте исключение, потому что недопустимо иметь escape-символ, который ничего не экранирует

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

Ответы [ 2 ]

5 голосов
/ 06 октября 2010

Я бы проголосовал за первое решение. Это облегчает формирование строк: если вы не знаете, имеет ли символ особое значение в вашем контексте, просто избегайте его. Это не повредит.

1 голос
/ 06 октября 2010

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

Поскольку я в основном программист на C ++, я бы проголосовал за вариант 4: организовать функцию, которая будет вызываться в таком случае. «Неисправная» последовательность передается ей в качестве параметра, и ожидается, что она либо вернет интерпретированный результат, либо выдаст исключение.

Если бы это был собственный API Windows, я бы ожидал что-то близкое к решению C ++, только оно будет создавать цепочку функций, начиная с самых последних добавленных и продвигаясь вниз по цепочке, пока функция не вернется. интерпретированный результат, или он достиг конца цепочки, где функция по умолчанию выдает исключение.

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