English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Дополнительный курс Ruby. Большинство операторов实际上是 вызовы методов. Например, a + b интерпретируется как a.+(b), где метод + переменной a вызывается, b как параметр метода вызова.
Для каждого оператора (+ - * / % ** & | ^ << >> && ||) есть соответствующий оператор присваивания в сокращенном виде (+= -= и т.д.).
Предположим, что значение переменной a равно 10, а значение переменной b равно 20, то:
Оператор | Описание | Пример |
---|---|---|
+ | Добавление - добавляет операнды с обеих сторон оператора | a + b будет равно 30 |
- | Вычитание - вычитает правый операнд из левого операнда | a - b будет равно -10 |
* | Множество - умножает операнды с обеих сторон оператора | a * b будет равно 200 |
/ | Деление - делит левый операнд на правый операнд | b / a будет равно 2 |
% | Модуль - делит левый операнд на правый операнд, возвращает остаток | b % a будет равно 0 |
** | Индекс - выполняет指数 вычисление | a**b будет равно 10 в 20-й степени |
Предположим, что значение переменной 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. |
Предположим, что значение переменной a равно 10, а значение переменной b равно 20, то:
Оператор | Описание | Пример |
---|---|---|
= | Простые операторы присваивания,assignит значение правой operand | c = a + b assignит значение a + b |
+= | Оператор сложения и присваивания,assigns результат сложения правой operand с левой operand | c += a эквивалентно c = c + a |
-= | Оператор вычитания и присваивания,assigns результат вычитания правой operand из левой operand | c -= a эквивалентно c = c - a |
*= | Оператор умножения и присваивания,assigns результат умножения правой operand на левую operand | c *= a эквивалентно c = c * a |
/= | Оператор деления и присваивания,assigns результат деления левой operand на правую operand | c /= a эквивалентно c = c / a |
%= | Оператор модуля и присваивания, вычисляет модуль двух operand и присваивает результат левой operand | c %= a эквивалентно c = c % a |
**= | Оператор умножения и присваивания, выполняет вычисление с степенью и присваивает результат левой operand | c **= a эквивалентно c = c ** a |
Ruby также поддерживает concurrent assignment переменных. Это позволяет инициализировать несколько переменных одним строкой Ruby кода. Например:
a = 10 b = 20 c = 30
Использование concurrent assignment позволяет быстрее объявлять:
a, b, c = 10, 20, 30
Конcurrent assignment также полезен при обмене значениями двух переменных:
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.
Оператор | Описание | Пример |
---|---|---|
& | Если бит существует в обоих операндах, двоичный оператор и копирует бит в результат. | (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.
Предположим, что значение переменной a равно 10, а значение переменной b равно 20, то:
Оператор | Описание | Пример |
---|---|---|
and | Назван логическим и оператором. Если оба операнда истинны, то условие истинно. | (a and b) истина. |
or | Назван логическим или оператором. Если один из операндов не равен нулю, то условие истинно. | (a or b) истина. |
&& | Назван логическим и оператором. Если оба операнда не равны нулю, то условие истинно. | (a && b) истина. |
|| | Назван логическим или оператором. Если один из операндов не равен нулю, то условие истинно. | (a || b) истина. |
! | Назван логическим неоператором. Используется для инверсии логического состояния операнда. Если условие истинно, то логический неоператор сделает его ложно. | !(a && b) ложно. |
not | Назван логическим неоператором. Используется для инверсии логического состояния операнда. Если условие истинно, то логический неоператор сделает его ложно. | not(a && b) ложно. |
Существует более одного оператора, называемого三元运算атором. Первый вычисляет истинность или лживость выражения, а затем на основе этого результата решает выполнять одну из двух следующих инструкций. Грамматика условного оператора выглядит следующим образом:
Оператор | Описание | Пример |
---|---|---|
? : | Условное выражение | если условие истины ? то значение X :否则 значение Y |
В Ruby диапазоны последовательностей используются для создания ряда последовательных значений - включающих начальное значение, конечное значение (в зависимости от ситуации) и значения между ними.
В Ruby эти последовательности создаются с помощью операторов диапазона ".." и "...". Двухточечная форма диапазона включает начальное значение и конечное значение, тройная точечная форма диапазона включает только начальное значение и не включает конечное значение.
Оператор | Описание | Пример |
---|---|---|
.. | Создает диапазон от начальной точки до конечной точки (включая конечную точку) | 1..10 создает диапазон от 1 до 10 |
... | Создает диапазон от начальной точки до конечной точки (не включая конечную точку) | 1...10 создает диапазон от 1 до 9 |
определено? является особой оператором, который来判断, определен ли передаваемый выражение, в виде метода вызова. Он возвращает строковое описание выражения, если выражение не определено, то возвращает nil.
ни один из них
определено? variable # если variable уже инициализирован,则为 True
например:
foo = 42 определено? foo # => "local-variable" определено? $_ # => "global-variable" определено? bar # => nil(не определено)
определено? method_call # если метод уже определен,则为 True
например:
определено? puts # => "method" определено? puts(bar) # => nil(здесь bar не определено) определено? unpack # => nil(здесь не определено)
# если существует метод, который может быть вызван super пользователем,则为 True определено? super
например:
определено? super # => "super"(если может быть вызван) определено? super # => nil(если не может быть вызван)
определено? yield # если передан кодовый блок,则为 True
например:
определено? yield # => "yield"(если передан блок) определено? yield # => nil(если не передан блок)
Вы можете вызывать методы класса или модуля, добавляя перед именем метода имя класса или модуля и .; вы можете ссылаться на константы класса или модуля, используя имя класса или модуля и два двоеточия ::.
:: является унарным оператором, который позволяет определять константы, примерные методы и классовые методы в классе или модуле, доступные из любого места вне класса или модуля.
Помните:В 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
В таблице ниже перечислены все операторы в порядке убывания приоритета.
Метод | Оператор | Описание |
---|---|---|
является | :: | Оператор анализа констант |
является | [ ] [ ]= | Указатель на элемент, множество элементов |
является | ** | Индекс |
является | ! ~ + - | Не, комплемент, унарное добавление, унарное вычитание (имена методов последних двух +@ и -@) |
является | * / % | Множение, деление, модуляция |
является | + - | Добавление и вычитание |
является | >>> << | Битовое右ое и левое смещение |
является | & | Битовое и |
является | ^ | | Битовые исключения и или |
является | <= < > >= | Операторы сравнения |
является | <=> == === != =~ !~ | Операторы сравнения и соответствия шаблону (не могут быть определены как методы != и !~) |
&& | Логическое и | |
|| | Логическое или | |
.. ... | Интервал (включает, не включает) | |
? : | Три条件的 if-then-else | |
= %= { /= -= += |= &= >>= <<= *= &&= ||= **= | Присваивание | |
defined? | Проверка того, определен ли указанный символ | |
not | Логическое отрицание | |
or and | Логическая структура |
Внимание:в методах списка обозначается как является Операторы, на самом деле являются методами, поэтому их можно перегрузить.