Литералы
Литералы создают объекты, которые можно использовать в вашей программе. Литералы включают:
-
Булевы значения и nil
-
Числа
-
Строки
-
Символы
-
Массивы
-
Хэши
-
Диапазоны
-
Регулярные выражения
-
Проци
Булевы значения и nil
nil и false — оба являются ложными значениями. nil иногда используется для обозначения «нет значения» или «неизвестно», но при вычислении в условных выражениях оценивается как false.
true является истинным значением. Все объекты, кроме nil и false, оцениваются как истинные значения в условных выражениях.
(Существуют также константы TRUE, FALSE и NIL, но предпочтительнее использовать прописные формы литералов.)
Числа
Вы можете записать целые числа любого размера следующим образом:
1234 1_234
Эти числа имеют одинаковое значение, 1234. Подчеркивание может использоваться для повышения удобочитаемости для человека. Вы можете разместить подчеркивание в любом месте числа.
Числа с плавающей точкой могут быть записаны следующим образом:
12.34 1234e-2 1.234E1
Эти числа имеют одинаковое значение, 12,34. Вы также можете использовать подчеркивания в числах с плавающей точкой.
Вы можете использовать специальный префикс для записи чисел в десятичном, шестнадцатеричном, восьмеричном или двоичном формате. Для десятичных чисел используйте префикс 0d, для шестнадцатеричных чисел — префикс 0x, для восьмеричных чисел — префикс 0 или 0o, для двоичных чисел — префикс 0b. Буквенная часть числа нечувствительна к регистру.
Примеры:
0d170 0D170 0xaa 0xAa 0xAA 0Xaa 0XAa 0XaA 0252 0o252 0O252 0b10101010 0B10101010
Все эти числа имеют одинаковое десятичное значение, 170. Как и целые числа и числа с плавающей точкой, вы можете использовать подчеркивание для повышения удобочитаемости.
Строки
Наиболее распространенный способ записи строк — использование ":
"This is a string."
Строка может быть многострочной.
Любое внутреннее " должно быть экранировано:
"This string has a quote: \". As you can see, it is escaped"
Строки в двойных кавычках позволяют экранировать символы, такие как \n для новой строки, \t для табуляции и т. д. Полный список поддерживаемых последовательностей экранирования приведен ниже:
\a bell, ASCII 07h (BEL)
\b backspace, ASCII 08h (BS)
\t horizontal tab, ASCII 09h (TAB)
\n newline (line feed), ASCII 0Ah (LF)
\v vertical tab, ASCII 0Bh (VT)
\f form feed, ASCII 0Ch (FF)
\r carriage return, ASCII 0Dh (CR)
\e escape, ASCII 1Bh (ESC)
\s space, ASCII 20h (SPC)
\\ backslash, \
\nnn octal bit pattern, where nnn is 1-3 octal digits ([0-7])
\xnn hexadecimal bit pattern, where nn is 1-2 hexadecimal digits ([0-9a-fA-F])
\unnnn Unicode character, where nnnn is exactly 4 hexadecimal digits ([0-9a-fA-F])
\u{nnnn ...} Unicode character(s), where each nnnn is 1-6 hexadecimal digits ([0-9a-fA-F])
\cx or \C-x control character, where x is an ASCII printable character
\M-x meta character, where x is an ASCII printable character
\M-\C-x meta control character, where x is an ASCII printable character
\M-\cx same as above
\c\M-x same as above
\c? or \C-? delete, ASCII 7Fh (DEL) Любой другой символ после обратной косой черты интерпретируется как символ сам по себе.
Строки в двойных кавычках позволяют интерполировать другие значения с помощью #{...}:
"One plus one is two: #{1 + 1}"
Любое выражение может быть помещено внутрь интерполируемой части, но лучше всего сохранять выражение небольшим для удобочитаемости.
Интерполяция может быть отключена путем экранирования символа «#» или использования строк в одинарных кавычках:
'#{1 + 1}' #=> "\#{1 + 1}"
Помимо отключения интерполяции, строки в одинарных кавычках также отключают все последовательности экранирования, кроме одинарной кавычки (\') и обратной косой черты (\\).
Вы также можете создавать строки с помощью %:
%Q(1 + 1 is #{1 + 1}) #=> "1 + 1 is 2"
Существуют два разных типа % строк %q(...) ведет себя как строка в одинарных кавычках (без интерполяции или экранирования символов), а %Q — как строка в двойных кавычках. См. Строки со знаком процента ниже, чтобы узнать больше о синтаксисе строк со знаком процента.
Смежные строковые литералы автоматически конкатенируются интерпретатором:
"con" "cat" "en" "at" "ion" #=> "concatenation" "This string contains " "no newlines." #=> "This string contains no newlines."
Любая комбинация смежных строк в одинарных кавычках, двойных кавычках, строк со знаком процента будет конкатенирована, если строка со знаком процента не стоит последней.
%q{a} 'b' "c" #=> "abc"
"a" 'b' %q{c} #=> NameError: uninitialized constant q
Еще один способ записи строк — использование ?:
?a #=> "a"
В основном после ? может быть размещен только один символ:
?abc #=> SyntaxError
Исключительно, \C-, \M- и их комбинация разрешены перед символом. Они обозначают «контроль», «мета» и «контроль-мета» соответственно:
?\C-a #=> "\x01" ?\M-a #=> "\xE1" ?\M-\C-a #=> "\x81" ?\C-\M-a #=> "\x81", same as above
Документы здесь
Если вы пишете большой блок текста, вы можете использовать «документ здесь» или «heredoc»:
expected_result = <<HEREDOC This would contain specially formatted text. That might span many lines HEREDOC
Heredoc начинается в строке, следующей за <<HEREDOC, и заканчивается следующей строкой, которая начинается с HEREDOC. Результат включает завершающую новую строку.
Вы можете использовать любой идентификатор с heredoc, но обычно используются идентификаторы с прописными буквами.
Вы можете отступать закрывающий идентификатор, если вы поместите «-» после <<:
expected_result = <<-INDENTED_HEREDOC This would contain specially formatted text. That might span many lines INDENTED_HEREDOC
Обратите внимание, что хотя закрывающий идентификатор может быть отступлен, содержимое всегда обрабатывается так, как будто оно выровнено слева. Если вы отступите содержимое, эти пробелы появятся в выводе.
Heredoc позволяет интерполяцию и экранированные символы. Вы можете отключить интерполяцию и экранирование, поместив открывающий идентификатор в одинарные кавычки:
expected_result = <<-'EXPECTED'
One plus one is #{1 + 1}
EXPECTED
p expected_result # prints: "One plus one is \#{1 + 1}\n"
Идентификатор также может быть помещен в двойные кавычки (что эквивалентно отсутствию кавычек) или в обратные кавычки. Когда он заключен в обратные кавычки, HEREDOC ведет себя как Kernel#`:
puts <<-`HEREDOC`
cat #{__FILE__}
HEREDOC
Для вызова метода на heredoc поместите его после открывающего идентификатора:
expected_result = "One plus one is #{1 + 1}
".chomp
Вы можете открыть несколько heredocs в одной строке, но это может быть сложно для чтения:
puts("content for heredoc one
", "content for heredoc two
")
Символы
Символ представляет имя внутри интерпретатора Ruby. См. Символ, чтобы узнать больше о том, что такое символы и когда Ruby создает их внутри.
Вы можете сослаться на символ с использованием двоеточия: :my_symbol.
Вы также можете создавать символы с помощью интерполяции:
:"my_symbol1"
:"my_symbol#{1 + 1}"
Как и в случае со строками, одинарные кавычки могут быть использованы для отключения интерполяции:
:'my_symbol#{1 + 1}' #=> :"my_symbol\#{1 + 1}"
При создании Хэша существует специальный синтаксис для ссылки на Символ тоже.
Массивы
Массив создается с использованием объектов между [ и ]:
[1, 2, 3]
Вы можете поместить выражения внутрь массива:
[1, 1 + 1, 1 + 2] [1, [1 + 1, [1 + 2]]]
См. раздел Массивы для методов, которые вы можете использовать с массивом.
Хэши
Хэш создается с использованием пар «ключ-значение» между { и }:
{ "a" => 1, "b" => 2 }
И ключ, и значение могут быть любым объектом.
Вы можете создать хэш с использованием символьных ключей с помощью следующего синтаксиса:
{ a: 1, b: 2 }
Этот же синтаксис используется для ключевых аргументов для метода.
См. Хэш для методов, которые вы можете использовать с хэшем.
Диапазоны
Диапазон представляет собой интервал значений. Диапазон может включать или исключать конечное значение.
(1..2) # includes its ending value (1...2) # excludes its ending value
Вы можете создать диапазон любого объекта. См. документацию Диапазона для получения подробной информации о методах, которые вам необходимо реализовать.
Регулярные выражения
Регулярное выражение создается с использованием «/»:
/my regular expression/
За регулярным выражением могут следовать флаги, которые изменяют поведение сопоставления регулярного выражения. Флаг «i» делает регулярное выражение регистронезависимым:
/my regular expression/i
Интерполяция может использоваться внутри регулярных выражений вместе с экранированными символами. Обратите внимание, что регулярное выражение может потребовать дополнительных экранированных символов, чем строка.
См. Regexp для описания синтаксиса регулярных выражений.
Проци
Прок может быть создан с помощью ->:
-> { 1 + 1 }
Вызов вышеупомянутого прока даст результат 2.
Вы можете потребовать аргументы для прока следующим образом:
->(v) { 1 + v }
Этот прок добавит единицу к своему аргументу.
Строки со знаком процента
Помимо %(...) которое создает строку, % может создавать другие типы объектов. Как и в случае со строками, прописная буква позволяет интерполяцию и экранирование символов, а строчная буква — нет.
Вот типы строк со знаком процента в Ruby:
-
%i -
Массив символов
-
%q -
Строка
-
%r -
Регулярное выражение
-
%s -
%w -
Массив строк
-
%x -
Обратные кавычки (захват результата подоболочки)
Для двух массивов форм строки со знаком процента, если вы хотите включить пробел в одну из записей массива, вы должны экранировать его символом «\»:
%w[one one-hundred\ one] #=> ["one", "one-hundred one"]
Если вы используете «(», «[», «{», «<», вы должны закрыть их «)», «]», «}», «>» соответственно. Вы можете использовать большинство других символов, не являющихся буквенно-цифровыми, для разделителей строк со знаком процента, таких как «%», «|», «^» и т. д.
Ruby Core © 1993–2017 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.