Spec-Zone.ru › Ruby 2.5

Литералы

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

  • Булевы значения и 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}"

Помимо отключения интерполяции, строки в одинарных кавычках также отключают все последовательности экранирования, кроме одинарной кавычки (\') и обратной косой черты (\\).

Также можно создавать строки, используя %:

%(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 = <<-EXPECTED.chomp
One plus one is #{1 + 1}
EXPECTED

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

puts(<<-ONE, <<-TWO)
content for heredoc one
ONE
content for heredoc two
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