Spec-Zone.ru › Ruby 2.3

Литералы

Литералы создают объекты, которые вы можете использовать в вашей программе. Литералы включают:

  • Булевы значения и 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
?\n      #=> "\n"
?\s      #=> " "
?\\      #=> "\\"
?\u{41}  #=> "A"
?\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 = <<~SQUIGGLY_HEREDOC
  This would contain specially formatted text.

  That might span many lines
SQUIGGLY_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

Вы можете открыть несколько heredoc в одной строке, но это может быть трудно читать:

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 }

Этот же синтаксис используется для ключевых аргументов для метода.

Как и в случае с литералами символов, вы можете использовать кавычки для символьных ключей.

{ "a 1": 1, "b #{1 + 1}": 2 }

равно

{ :"a 1" => 1, :"b 2" => 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API