English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Операторы Ruby

Дополнительный курс Ruby. Большинство операторов实际上是 вызовы методов. Например, a + b интерпретируется как a.+(b), где метод + переменной a вызывается, b как параметр метода вызова.

Для каждого оператора (+ - * / % ** & | ^ << >> && ||) есть соответствующий оператор присваивания в сокращенном виде (+= -= и т.д.).

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

Предположим, что значение переменной a равно 10, а значение переменной b равно 20, то:

ОператорОписаниеПример
+Добавление - добавляет операнды с обеих сторон оператораa + b будет равно 30
-Вычитание - вычитает правый операнд из левого операндаa - b будет равно -10
*Множество - умножает операнды с обеих сторон оператораa * b будет равно 200
/Деление - делит левый операнд на правый операндb / a будет равно 2
%Модуль - делит левый операнд на правый операнд, возвращает остатокb % a будет равно 0
**Индекс - выполняет指数 вычислениеa**b будет равно 10 в 20-й степени

Операторы сравнения Ruby

Предположим, что значение переменной a равно 10, а значение переменной b равно 20, то:

ОператорОписаниеПример
==Проверьте, равны ли значения обоих операндов, если да, то условие истины.(a == b) не истина.
!=Проверьте, равны ли значения обоих операндов, если не равны, то условие истины.(a != b) истина.
>Проверьте, является ли значение левого операнда больше значения правого операнда, если да, то условие истины.(a > b) не истина.
<Проверьте, является ли значение левого операнда меньше значения правого операнда, если да, то условие истины.(a < b) истина.
>=Проверьте, является ли значение левого операнда больше или равно значению правого операнда, если да, то условие истины.(a >= b) не истина.
<=Проверяет, является ли значение левого operand меньше или равно значению правого operand, если да, то условие истины.(a <= b) истина.
<=>Объединенный сравнительный оператор. Если первый operand равен второму operand, то возвращает 0, если первый operand больше второго operand, то возвращает 1, если первый operand меньше второго operand, то возвращает -1.(a <=> b) возвращает -1.
===используется для тестирования case Равенство в предложении when(1...10) === 5 возвращает true.
.eql?Если приемник и параметр имеют одинаковый тип и равные значения, то возвращает true.1 == 1.0 возвращает true, но 1.eql?(1.0) возвращает false.
equal?Если приемник и параметр имеют одинаковый объект id, то возвращает true.Если aObj является копией bObj, то aObj == bObj возвращает true, a.equal?bObj возвращает false, но a.equal?aObj возвращает true.

Операторы присваивания Ruby

Предположим, что значение переменной a равно 10, а значение переменной b равно 20, то:

ОператорОписаниеПример
=Простые операторы присваивания,assignит значение правой operandc = a + b assignит значение a + b
+=Оператор сложения и присваивания,assigns результат сложения правой operand с левой operandc += a эквивалентно c = c + a
-=Оператор вычитания и присваивания,assigns результат вычитания правой operand из левой operandc -= a эквивалентно c = c - a
*=Оператор умножения и присваивания,assigns результат умножения правой operand на левую operandc *= a эквивалентно c = c * a
/=Оператор деления и присваивания,assigns результат деления левой operand на правую operandc /= a эквивалентно c = c / a
%=Оператор модуля и присваивания, вычисляет модуль двух operand и присваивает результат левой operandc %= a эквивалентно c = c % a
**=Оператор умножения и присваивания, выполняет вычисление с степенью и присваивает результат левой operandc **= a эквивалентно c = c ** a

Ruby concurrent assignment

Ruby также поддерживает concurrent assignment переменных. Это позволяет инициализировать несколько переменных одним строкой Ruby кода. Например:

a = 10
b = 20
c = 30

Использование concurrent assignment позволяет быстрее объявлять:

a, b, c = 10, 20, 30

Конcurrent assignment также полезен при обмене значениями двух переменных:

a, b = b, c

Ruby битовые операторы

Битовые операторы действуют на биты и выполняют операции по биту.

Предположим, если 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.

ОператорОписаниеПример
&Если бит существует в обоих операндах, двоичный оператор и копирует бит в результат.(a & b) будет равно 12, то есть 0000 1100
|Если бит существует в любом из операндов, двоичный оператор или копирует бит в результат.(a | b) будет равно 61, то есть 0011 1101
^Если бит существует в одном из операндов, но не существует в обоих операндах, двоичный оператор исключающего или копирует бит в результат.(a ^ b) будет равно 49, то есть 0011 0001
~Двоичный оператор補码 является унарным оператором с эффектом "перемены" битов, то есть 0 становится 1, а 1 становится 0.(~a) будет равно -61, то есть 1100 0011, это форма кода補码 двоичного числа.
<<Двоичный левый сдвиг оператора. Значение левого операнда сдвигается влево на количество битов, указанное правым операндом.a << 2 будет равно 240, то есть 1111 0000
>>Двоичный правый сдвиг оператора. Значение левого операнда сдвигается вправо на количество битов, указанных правым операндом.a >> 2 будет равно 15, то есть 0000 1111

Ruby логические операторы

В таблице ниже перечислены логические операторы, поддерживаемые Ruby.

Предположим, что значение переменной a равно 10, а значение переменной b равно 20, то:

ОператорОписаниеПример
andНазван логическим и оператором. Если оба операнда истинны, то условие истинно.(a and b) истина.
orНазван логическим или оператором. Если один из операндов не равен нулю, то условие истинно.(a or b) истина.
&&Назван логическим и оператором. Если оба операнда не равны нулю, то условие истинно.(a && b) истина.
||Назван логическим или оператором. Если один из операндов не равен нулю, то условие истинно.(a || b) истина.
!Назван логическим неоператором. Используется для инверсии логического состояния операнда. Если условие истинно, то логический неоператор сделает его ложно.!(a && b) ложно.
notНазван логическим неоператором. Используется для инверсии логического состояния операнда. Если условие истинно, то логический неоператор сделает его ложно.not(a && b) ложно.

Ruby三元运算符

Существует более одного оператора, называемого三元运算атором. Первый вычисляет истинность или лживость выражения, а затем на основе этого результата решает выполнять одну из двух следующих инструкций. Грамматика условного оператора выглядит следующим образом:

ОператорОписаниеПример
? :Условное выражениеесли условие истины ? то значение X :否则 значение Y

Операторы диапазона в Ruby

В Ruby диапазоны последовательностей используются для создания ряда последовательных значений - включающих начальное значение, конечное значение (в зависимости от ситуации) и значения между ними.

В Ruby эти последовательности создаются с помощью операторов диапазона ".." и "...". Двухточечная форма диапазона включает начальное значение и конечное значение, тройная точечная форма диапазона включает только начальное значение и не включает конечное значение.

ОператорОписаниеПример
..Создает диапазон от начальной точки до конечной точки (включая конечную точку)1..10 создает диапазон от 1 до 10
...Создает диапазон от начальной точки до конечной точки (не включая конечную точку)1...10 создает диапазон от 1 до 9

Оператор defined? в Ruby

определено? является особой оператором, который来判断, определен ли передаваемый выражение, в виде метода вызова. Он возвращает строковое описание выражения, если выражение не определено, то возвращает nil.

ни один из них

Использование 1

определено? variable # если variable уже инициализирован,则为 True

например:

foo = 42
определено? foo    # => "local-variable"
определено? $_     # => "global-variable"
определено? bar    # => nil(не определено)

Использование 2

определено? method_call # если метод уже определен,则为 True

например:

определено? puts        # => "method"
определено? puts(bar)   # => nil(здесь bar не определено)
определено? unpack      # => nil(здесь не определено)

Использование 3

# если существует метод, который может быть вызван super пользователем,则为 True
определено? super

например:

определено? super     # => "super"(если может быть вызван)
определено? super     # => nil(если не может быть вызван)

Использование 4

определено? yield    # если передан кодовый блок,则为 True

например:

определено? yield    # => "yield"(если передан блок)
определено? yield    # => nil(если не передан блок)

Точка运算атор "." и двойное двоеточие运算атор "::" в Ruby

Вы можете вызывать методы класса или модуля, добавляя перед именем метода имя класса или модуля и .; вы можете ссылаться на константы класса или модуля, используя имя класса или модуля и два двоеточия ::.

:: является унарным оператором, который позволяет определять константы, примерные методы и классовые методы в классе или модуле, доступные из любого места вне класса или модуля.

Помните:В Ruby классы и методы также могут быть использованы как константы.

Вам нужно только добавить перед именем константы :: префикс, то можно вернуть соответствующий объект класса или модуля.

Если перед :: выражение является именем класса или модуля, то возвращается соответствующее значение константы в этом классе или модуле; если перед :: нет префиксного выражения, то возвращается соответствующее значение константы в основном классе Object. .

Ниже приведены два примера:

MR_COUNT = 0 # Определено в основном классе Object
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

Приоритет операторов в Ruby

В таблице ниже перечислены все операторы в порядке убывания приоритета.

МетодОператорОписание
является::Оператор анализа констант
является[ ] [ ]=Указатель на элемент, множество элементов
является**Индекс
является! ~ + -Не, комплемент, унарное добавление, унарное вычитание (имена методов последних двух +@ и -@)
является* / %Множение, деление, модуляция
является+ -Добавление и вычитание
является>>> <<Битовое右ое и левое смещение
является&Битовое и
является^ |Битовые исключения и или
является<= < > >=Операторы сравнения
является<=> == === != =~ !~Операторы сравнения и соответствия шаблону (не могут быть определены как методы != и !~)

&&Логическое и

||Логическое или

.. ...Интервал (включает, не включает)

? :Три条件的 if-then-else

= %= { /= -= += |= &= >>= <<= *= &&= ||= **=Присваивание

defined?Проверка того, определен ли указанный символ

notЛогическое отрицание

or andЛогическая структура

Внимание:в методах списка обозначается как является Операторы, на самом деле являются методами, поэтому их можно перегрузить.