Типы данных Ruby

В этой главе мы познакомимся с базовыми типами данных Ruby.

Типы данных, поддерживаемые Ruby, включают базовые Number, String, Ranges, Symbols, а также специальные значения true, false и nil и две важные структуры данных — Array и Hash.


Числовые типы (Number)

1. Целые числа

Существует два типа целых чисел. Если в пределах 31 бита (четырёх байтов), это экземпляр Fixnum. Если оно превышает этот предел, это экземпляр Bignum.

Диапазон целых чисел — от -230до 230-1, и целые числа в этом диапазоне являются объектами классаFixnum. Когда значение целого числа больше или равно 2 в 30-й степени ( -262до 262-1), оно автоматически преобразуется в тип Bignum.

Перед целым числом можно указать необязательный ведущий знак, необязательный индикатор основания (0 для восьмеричной, 0x для шестнадцатеричной, 0b для двоичной), за которым следует последовательность цифр. Символы подчёркивания в числовой строке игнорируются.

Можно получить целочисленное значение ASCII-символа или escape-последовательности, отмеченной вопросительным знаком.

Пример

123 #Десятичное Fixnum 1_234 #Десятичное Fixnum с подчёркиваниями -500 #Отрицательное Fixnum 0377 #Восьмеричное 0xff #Шестнадцатеричное 0b1011 #Двоичное "a".ord #Код символа "a" ?\n #Код символа новой строки (0x0a) 12345678901234567890 #Большое число #Целое число. Ниже приведены некоторые целочисленные литералы. #Литерал: значения, которые можно увидеть в коде — числа, логические значения, строки и т. д. — называются литералами. #Например, 0, 1_000_000, 0xa и т. д. a1=0 #Целое число с разделителями тысяч a2=1_000_000 #Представление в других системах счисления a3=0xa puts a1,a2 puts a3 #puts и print оба выводят символы в консоль, при этом puts добавляет новую строку. =beginЭто комментарий, называемый встроенным комментарием документации, похожий наC#/**/ в =end

Тип с плавающей запятой

Ruby поддерживает числа с плавающей запятой. Это числа с десятичными дробями. Числа с плавающей запятой являются объектами классаFloatи могут быть любыми из следующих.

Пример

Пример

123.4 #Значение с плавающей запятой 1.0e6 #Экспоненциальная запись 4E20 #Не обязательно 4e+20 #Знак перед экспонентой #Тип с плавающей запятой f1=0.0 f2=2.1 f3=1000000.1 puts f3

Арифметические операции

Операторы сложения, вычитания, умножения и деления: + - * /; оператор возведения в степень — **

Показатель степени не обязательно должен быть целым числом, например

Пример

#Арифметика показателей степени puts 2**(1/4) # Частное от деления 1 на 4 равно 0, затем 2 в 0-й степени равно 1 puts 16**(1/4.0)#Частное от деления 1 на 4.0 равно 0.25 (одна четверть), затем извлеките корень четвертой степени.

Строковый тип

Строка Ruby — это просто последовательность 8-битных байтов, и они являются объектами класса String.

Строки, заключенные в двойные кавычки, допускают подстановку и использование escape-последовательностей с обратной косой чертой; строки, заключенные в одинарные кавычки, не допускают подстановки и допускают только две escape-последовательности с обратной косой чертой: \\ и \'.

Пример

#!/usr/bin/ruby -w puts 'escape using "\\"'; puts 'Это\'верно';

Попробуйте »

Это даст следующий результат:

escape using "\"
That's right

Вы можете использовать последовательность#{ expr }для подстановки значения любого выражения Ruby в строку. Здесь expr может быть любым выражением Ruby.

Пример

#!/usr/bin/ruby -w puts "Multiply: #{24*60*60}";

Это даст следующий результат:

相乘 : 86400

Пример

#!/usr/bin/ruby -w name="Ruby" puts name puts "#{name+",ok"}"

Результат вывода:

Ruby
Ruby,ok

Обозначения обратного слэша

В следующей таблице перечислены обозначения обратного слэша, поддерживаемые Ruby:

ОбозначенияПредставляемый символ
\nНовая строка (0x0a)
\rВозврат каретки (0x0d)
\fПодача страницы (0x0c)
\bВозврат на шаг (0x08)
\aЗвонок (0x07)
\eEscape (0x1b)
\sПробел (0x20)
\nnnВосьмеричная запись (n — 0-7)
\xnnШестнадцатеричная запись (n — 0-9, a-f или A-F)
\cx, \C-xControl-x
\M-xMeta-x (c | 0x80)
\M-\C-xMeta-Control-x
\xСимвол x

Подробнее о строках Ruby см.Ruby String。

Массивы

Литералы массива определяются значениями, разделёнными запятыми, внутри [], а также поддерживают определения диапазонов.

  • (1) Доступ к массивам осуществляется по индексу через []
  • (2) Вставка, удаление и замена элементов с помощью операций присваивания
  • (3) Используйте + и - для объединения и удаления элементов, и коллекция возвращается как новая коллекция.
  • (4) Знак << добавляет элементы к исходным данным.
  • (5) Знак * повторяет элементы массива.
  • (6) Символы | и & используются для операций объединения и пересечения (обратите внимание на порядок).

Пример

#!/usr/bin/ruby ary = [ "fred", 10, 3.14, "Это строка", "последний элемент", ] ary.each do |i| puts i end

Попробуйте »

Это даст следующий результат:

fred
10
3.14
This is a string
last element

Для получения дополнительных сведений о массивах Ruby см.Массив Ruby。

Тип Hash

Хэш Ruby — это последовательность пар ключ/значение, заключённых в фигурные скобки, где ключи и значения разделяются запятыми и последовательностью =>. Запятые в конце игнорируются.

Пример

Пример

#!/usr/bin/ruby hsh = colors = { "red" => 0xf00, "green" => 0x0f0, "blue" => 0x00f } hsh.each do |key, value| print key, " is ", value, "\n" end

Попробуйте »

Это даст следующий результат:

red is 3840
green is 240
blue is 15

Для получения дополнительной информации о хэшах Ruby см.Ruby Hash。

Тип Range

Диапазон представляет собой интервал.

Диапазон задаётся указанием начального и конечного значения. Диапазоны можно создать с помощью s..e и s...e или с помощью Range.new.

Диапазон, созданный с помощью .., проходит от начального значения до конечного значения (включительно). Диапазон, созданный с помощью ..., проходит от начального значения до конечного значения (исключительно). При использовании в качестве итератора диапазон возвращает каждое значение в последовательности.

Диапазон (1..5) означает, что он содержит значения 1, 2, 3, 4, 5, а диапазон (1...5) означает, что он содержит значения 1, 2, 3, 4.

Пример

#!/usr/bin/ruby (10..15).each do |n| print n, ' ' end

Попробуйте »

Это даст следующий результат:

10 11 12 13 14 15

Для получения дополнительной информации о диапазонах Ruby см.Ruby Range。

Другие расширения