Ruby поддерживает богатый набор операторов, как и следовало ожидать от современного языка. Большинство операторов — это фактически вызовы методов. Например, a + b интерпретируется как. + (B), где метод + в объекте, на который ссылается переменная a, вызывается с аргументом b .
Для каждого оператора (+ — * /% ** & | ^ << >> && ||) существует соответствующая форма оператора сокращенного присваивания (+ = — = и т. д.).
Предположим, что переменная a имеет значение 10, а переменная b имеет значение 20, тогда:
оператор | Описание | пример |
---|---|---|
+ | Дополнение — добавляет значения по обе стороны оператора. | a + b даст 30 |
— | Вычитание — вычитает правый операнд из левого операнда. | a — b даст -10 |
* | Умножение — умножает значения по обе стороны оператора. | a * b даст 200 |
/ | Разделение — делит левый операнд правой рукой. | b / a даст 2 |
% | Модуль — делит левый операнд правой рукой и возвращает остаток. | b % a даст 0 |
** | Exponent — Выполняет экспоненциальный (энергетический) расчет для операторов. | a ** b даст 10 мощности 20 |
Предположим, что переменная a имеет значение 10, а переменная b имеет значение 20, тогда —
оператор | Описание | пример |
---|---|---|
== | Проверяет, равно ли значение двух операндов или нет, если да, то условие становится истинным. | (a == b) не соответствует действительности. |
!= | Проверяет, равно ли значение двух операндов или нет, если значения не равны, тогда условие становится истинным. | (a! = b) истинно. |
> | Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным. | (a> b) неверно. |
< | Проверяет, является ли значение левого операнда меньше значения правильного операнда, если да, тогда условие становится истинным. | (a <b) истинно. |
> = | Проверяет, превышает ли значение левого операнда значение правого операнда, если да, тогда условие становится истинным. | (a> = b) неверно. |
<= | Проверяет, является ли значение левого операнда меньше или равно значению правильного операнда, если да, тогда условие становится истинным. | (a <= b) истинно. |
<=> | Комбинированный оператор сравнения. Возвращает 0, если первый операнд равен второму, 1, если первый операнд больше второго и -1, если первый операнд меньше второго. | (a <=> b) возвращает -1. |
=== | Используется для проверки равенства внутри предложения whencase . | (1 … 10) === 5 возвращает true. |
.eql? | Истина, если приемник и аргумент имеют одинаковый тип и равные значения. | 1 == 1.0 возвращает true, но 1.eql? (1.0) является ложным. |
equal? | Истина, если приемник и аргумент имеют одинаковый идентификатор объекта. | если aObj является дубликатом bObj, тогда aObj == bObj истинно, a.equal? bObj является ложным, но a.equal? aObj истинно. |
Предположим, что переменная a имеет значение 10, а переменная b имеет значение 20, тогда:
оператор | Описание | пример |
---|---|---|
= | Простой оператор присваивания, присваивает значения из правых операндов в левый операнд. | c = a + b присваивает значение a + b в c |
+= | Оператор Add AND присваивает, добавляет правый операнд в левый операнд и присваивает результат левому операнду. | c + = a эквивалентно c = c + a |
-= | Вычитает и присваивает оператор, вычитает правый операнд из левого операнда и присваивает результат левому операнду. | с — = а эквивалентно с = с — а |
*= | Оператор умножения и присваивания, умножает правый операнд на левый операнд и присваивает результат левому операнду. | c * = a эквивалентно c = c * a |
/= | Оператор Divide AND присваивает, делит левый операнд на правый операнд и присваивает результат левому операнду. | c / = a эквивалентно c = c / a |
%= | Оператор модуля и присваивания, принимает модуль с использованием двух операндов и присваивает результат левому операнду. | c% = a эквивалентно c = c% a |
**= | Оператор Exponent AND присваивает операторам экспоненциальный (энергетический) расчет и присваивает значение левому операнду. | c ** = a эквивалентно c = c ** a |
Ruby также поддерживает параллельное назначение переменных. Это позволяет инициализировать несколько переменных с помощью одной строки кода Ruby. Например:
a = 10 b = 20 c = 30
Это можно более быстро объявить, используя параллельное назначение:
a, b, c = 10, 20, 30
Параллельное назначение также полезно для замены значений, удерживаемых в двух переменных:
a, b = b, c
Побитовый оператор работает с битами и выполняет побитовую операцию.
Предположим, что a = 60; и b = 13; теперь в двоичном формате они будут выглядеть следующим образом:
a = 0011 1100 b = 0000 1101 ------------------ a&b = 0000 1100 a|b = 0011 1101 a^b = 0011 0001 ~a = 1100 0011
Язык Ruby поддерживает следующими побитовые операторы.
оператор | Описание | пример |
---|---|---|
& | Двоичный оператор AND копирует бит в результат, если он существует в обоих операндах. | (a & b) даст 12, что составляет 0000 1100 |
| | Двоичный оператор OR копирует бит, если он существует в любом из операндов. | (a | b) даст 61, что составляет 0011 1101 |
^ | Оператор двоичного XOR копирует бит, если он установлен в один операнд, но не тот и другой. | (a ^ b) даст 49, то есть 0011 0001 |
~ | Binary Ones Оператор дополнения является унарным и имеет эффект «flipping» бит. | (~ a) даст -61, что составляет 1100 0011 в форме дополнения 2 из-за подписанного двоичного числа. |
<< | Двойной левый оператор сдвига.Значение левых операндов перемещается влево на количество бит, заданных правым операндом. | a << 2 даст 240, что составляет 1111 0000 |
>> | Двоичный оператор правого сдвига.Значение левых операндов перемещается вправо на количество бит, заданных правым операндом. | a >> 2 даст 15, то есть 0000 1111 |
Язык Ruby поддерживает следующие логические операторы
Предположим, что переменная a имеет значение 10, а переменная b имеет значение 20, тогда:
оператор | Описание | пример |
---|---|---|
and | Вызывается логическим оператором AND. Если оба операнда верны, тогда условие становится истинным. | (a и b) верно. |
or | Вызывается логическим оператором ИЛИ. Если какой-либо из двух операндов не равен нулю, то условие становится истинным. | (a или b) истинно. |
&& | Вызывается логическим оператором AND. Если оба операнда не равны нулю, условие становится истинным. | (a && b) истинно. |
|| | Вызывается логическим оператором ИЛИ. Если какой-либо из двух операндов не равен нулю, то условие становится истинным. | (a || b) истинно. |
! | Вызывается логическим оператором NOT. Используется для изменения логического состояния операнда. Если условие истинно, то логический оператор NOT сделает ложным. | ! (a && b) является ложным. |
not | Вызывается логическим оператором NOT. Используется для изменения логического состояния операнда. Если условие истинно, то логический оператор NOT сделает ложным. | not (a && b) является ложным. |
Существует еще один оператор, называемый Тернарный оператор. Сначала он вычисляет выражение для истинного или ложного значения и затем выполняет одно из двух заданных операторов в зависимости от результата оценки. Условный оператор имеет этот синтаксис:
оператор | Описание | пример |
---|---|---|
? : | Условное выражение | Если условие верно? Тогда значение X: В противном случае значение Y |
Диапазоны последовательностей в Ruby используются для создания диапазона последовательных значений, состоящих из начального значения, конечного значения и диапазона значений между ними.
В Ruby эти последовательности создаются с использованием операторов диапазона «..» и «…». Двухточечная форма создает инклюзивный диапазон, а трехточечная форма создает диапазон, исключающий указанное высокое значение.
оператор | Описание | пример |
---|---|---|
.. | Создает диапазон от начальной до конечной точки включительно. | 1..10 Создает диапазон от 1 до 10 включительно. |
… | Создает диапазон от начальной точки до конечной точки. | 1 … 10 Создает диапазон от 1 до 9. |
defined? является специальным оператором, который принимает форму вызова метода, чтобы определить, определено ли переданное выражение. Он возвращает строку описания выражения или nil, если выражение не определено.
Существуют различные варианты оператора defined?
defined? variable # True, если переменная инициализирована
Например
foo = 42 defined? foo # => "local-variable" defined? $_ # => "global-variable" defined? bar # => nil (undefined)
defined? method_call # True, если определен метод
Например
defined? puts # => "method" defined? puts(bar) # => nil (bar is not defined here) defined? unpack # => nil (not defined here)
# True, если существует метод, который можно вызвать с помощью super user defined? super
Например
defined? super # => "super" (if it can be called) defined? super # => nil (if it cannot be)
defined? yield # True, если передан блок кода
Например
defined? yield # => "yield" (if there is a block passed) defined? yield # => nil (if there is no block)
Вы вызываете метод модуля, вызывая его имя с именем модуля и периодом, и ссылаетесь на константу, используя имя модуля и два двоеточия.
:: является унарным оператором, который позволяет: константы, методы экземпляра и методы класса , определенные внутри класса или модуля, чтобы получить доступ из любой точки мира за пределами класса или модуля.
Помните, что в Ruby классы и методы также могут считаться константами.
Вам нужно просто префикс :: Const_name с выражением, которое возвращает соответствующий класс или объект модуля.
Если выражение префикса не используется, по умолчанию используется основной класс Object.
Вот два примера:
MR_COUNT = 0 # константа определена главным объектом класса module Foo MR_COUNT = 0 ::MR_COUNT = 1 # установить глобальный счетчик на 1 MR_COUNT = 2 # установить глобальный счетчик на 2 end puts MR_COUNT # это глобальная константа puts Foo::MR_COUNT # это местная константа "Foo"
Второй пример
CONST = ' out there' class Inside_one CONST = proc {' in there'} def where_is_my_CONST ::CONST + ' inside one' end end class Inside_two CONST = ' inside two' def where_is_my_CONST CONST end end puts Inside_one.new.where_is_my_CONST puts Inside_two.new.where_is_my_CONST puts Object::CONST + Inside_two::CONST puts Inside_two::CONST + CONST puts Inside_one::CONST puts Inside_one::CONST.call + Inside_two::CONST
В следующей таблице перечислены все операторы от наивысшего приоритета до самого низкого.
метод | оператор | Описание |
---|---|---|
да | :: | Оператор с постоянным разрешением |
да | [ ] [ ]= | Ссылка на элемент, набор элементов |
да | ** | Экспоненциация (повышение до власти) |
да | ! ~ + — | Не, дополнение, унарный плюс и минус (имена методов для последних двух — + @ и — @) |
да | * /% | Умножьте, разделите и по модулю |
да | + — | Сложение и вычитание |
да | >> << | Правый и левый побитовый сдвиг |
да | & | Побитовое «AND» |
да | ^ | | Побитовое эксклюзивное `OR ‘и регулярное` OR’ |
да | <= <>> = | Операторы сравнения |
да | <=> == ===! = = ~ !~ | Операторы равенства и соответствия шаблонов (! = И! ~ Не могут быть определены как методы) |
&& | Логический ‘AND’ | |
|| | Логический ‘OR’ | |
.. … | Диапазон (включительно и эксклюзивно) | |
? : | Тройное if-then-else | |
= %= { /= -= += |= &= >>= <<= *= &&= ||= **= | присваивание | |
defined? | Проверьте, установлен ли указанный символ | |
not | Логическое отрицание | |
or and | Логическая композиция |