Литералы рун (Rune literals)
Литерал руны представляет собой константу руны, целочисленное значение, идентифицирующее кодовую точку Unicode. Литерал руны выражается в виде одного или нескольких символов, заключенных в одинарные кавычки, например, 'x' или '\n'. В кавычках может появляться любой символ, кроме новой строки и неэкранированной одинарной кавычки. Символ в кавычках представляет значение Unicode самого символа, а многосимвольные последовательности, начинающиеся с обратной косой черты, кодируют значения в различных форматах.
Самая простая форма представляет один символ в кавычках; поскольку исходный текст Go представляет собой символы Unicode, закодированные в UTF-8, несколько байтов в кодировке UTF-8 могут представлять одно целочисленное значение. Например, литерал 'a' содержит один байт, представляющий литерал a, Unicode U+0061, значение 0x61, в то время как 'ä' содержит два байта (0xc3 0xa4), представляющий литерал a-dieresis, U+00E4, значение 0xe4.
Несколько экранов с обратной косой чертой позволяют кодировать произвольные значения в виде текста ASCII. Существует четыре способа представления целочисленного значения в виде числовой константы: \x, за которой следуют ровно две шестнадцатеричные цифры; \u, за которой следуют ровно четыре шестнадцатеричные цифры; \U, за которой следуют ровно восемь шестнадцатеричных цифр и простой обратный слеш \, за которыми следуют ровно три восьмеричных знака. В каждом случае значение литерала - это значение, представленное цифрами в соответствующей базе.
Хотя все эти представления приводят к целому числу, они имеют разные допустимые диапазоны. Восьмеричные экранирования должны представлять значение от 0 до 255 включительно. Шестнадцатеричные экранирования удовлетворяют этому условию по построению. Экранирующие символы \u и \U представляют кодовые точки Unicode, поэтому в них некоторые значения недопустимы, в частности значения выше 0x10FFFF и суррогатные половины.
После обратной косой черты некоторые односимвольные экранированные символы представляют собой специальные значения:
\a U+0007 alert or bell
\b U+0008 backspace (пробел)
\f U+000C form feed (символ конца страницы)
\n U+000A line feed or newline (символ возврата строки)
\r U+000D carriage return (символ возврата каретки)
\t U+0009 horizontal tab (горизонтальный таб)
\v U+000b vertical tab (вертикальный таб)
\\ U+005c backslash (обратный слеш)
\' U+0027 single quote (одинарная кавычка, валидный экран только внутри литералов рун)
\" U+0022 double quote (двойная кавычка, валидный экран только внутри строковых литералов)
Все остальные последовательности, начинающиеся с обратной косой черты, недопустимы внутри литералов рун.
rune_lit = "'" ( unicode_value | byte_value ) "'" .
unicode_value = unicode_char | little_u_value | big_u_value | escaped_char .
byte_value = octal_byte_value | hex_byte_value .
octal_byte_value = `\` octal_digit octal_digit octal_digit .
hex_byte_value = `\` "x" hex_digit hex_digit .
little_u_value = `\` "u" hex_digit hex_digit hex_digit hex_digit .
big_u_value = `\` "U" hex_digit hex_digit hex_digit hex_digit
hex_digit hex_digit hex_digit hex_digit .
escaped_char = `\` ( "a" | "b" | "f" | "n" | "r" | "t" | "v" | `\` | "'" | `"` ) .
Примеры:
'a'
'ä'
'本'
'\t'
'\000'
'\007'
'\377'
'\x07'
'\xff'
'\u12e4'
'\U00101234'
'\'' // литерал руны, содуржащий символ одинарной кавычки
'aa' // недопустимо: слишком много символов
'\xa' // недопустимо: слишком мало шестнадцатеричных цифр
'\0' // недопустимо: слишком мало восьмеричных цифр
'\uDFFF' // недопустимо: суррогатная половина
'\U00110000' // недопустимо: невалидная Unicode кодовая точка
Читайте также:
- Спецификация Go: литералы
- Спецификация Go: представление исходного кода
- Спецификация Go: лексические элементы
Комментариев нет:
Отправить комментарий