English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Ruby admite una serie de operadores ricos. La mayoría de los operadores son llamadas a métodos. Por ejemplo, a + b se interpreta como a.+(b), donde apunta a la variable a de + El método se llama, y b se utiliza como parámetro de la llamada al método.
Para cada operador (+ - * / % ** & | ^ << >> && ||), tienen un operador de asignación abreviado correspondiente (+= -= y otros).
Supongamos que el valor de la variable a es 10La variable b tiene el valor de 20, entonces:
Operador | Descripción | ejemplo |
---|---|---|
+ | Adición - Suma los operandos a ambos lados del operador | a + b recibirá 30 |
- | Resta - Restar el operando izquierdo por el operando derecho | a - b recibirá -10 |
* | Multiplicación - Multiplicar los operandos a ambos lados del operador | a * b recibirá 200 |
/ | División - Dividir el operando izquierdo por el operando derecho | b / a recibirá 2 |
% | Módulo - Dividir el operando izquierdo por el operando derecho, devolver el residuo | b % a recibirá 0 |
** | Exponente - Ejecutar cálculo exponencial | a**b recibirá 10 potencia 20 |
Supongamos que el valor de la variable a es 10La variable b tiene el valor de 20, entonces:
Operador | Descripción | ejemplo |
---|---|---|
== | Verifica si los valores de los dos operandos son iguales, y si lo son, la condición es verdadera. | (a == b) no es verdadero. |
!= | Verifica si los valores de los dos operandos son iguales, y si no lo son, la condición es verdadera. | (a != b) es verdadero. |
> | Verifica si el valor del operando izquierdo es mayor que el valor del operando derecho, y si es así, la condición es verdadera. | (a > b) no es verdadero. |
< | Verifica si el valor del operando izquierdo es menor que el valor del operando derecho, y si es así, la condición es verdadera. | (a < b) es verdadero. |
>= | Verifica si el valor del operando izquierdo es mayor o igual al valor del operando derecho, y si es así, la condición es verdadera. | (a >= b) no es verdadero. |
<= | Verifica si el valor del operando izquierdo es menor o igual al valor del operando derecho, y si es así, la condición es verdadera. | (a <= b) es verdadero. |
<=> | Operador de comparación combinada. Si el primer operando es igual al segundo operando, devuelve 0; si el primer operando es mayor que el segundo operando, devuelve 1,si el primer operando es menor que el segundo operando, devuelve -1. | (a <=> b) devuelve -1. |
=== | Se utiliza para probar case Comparación de igualdad en la cláusula when de la sentencia. | (1...10) === 5 Devuelve true. |
.eql? | Si el receptor y los parámetros tienen el mismo tipo y valores iguales, devuelve true. | 1 == 1.0 devuelve true, pero 1.eql?(1.0) devuelve false. |
equal? | Si el receptor y los parámetros tienen el mismo id de objeto, devuelve true. | Si aObj es una copia de bObj, entonces aObj == bObj devuelve true, a.equal?bObj devuelve false, pero a.equal?aObj devuelve true. |
Supongamos que el valor de la variable a es 10La variable b tiene el valor de 20, entonces:
Operador | Descripción | ejemplo |
---|---|---|
= | Operador de asignación simple, asigna el valor del operando derecho al operando izquierdo | c = a + b asignará a a + El valor de b se asigna a c |
+= | Operador de asignación de adición, asigna el resultado de sumar el operando derecho al operando izquierdo al operando izquierdo | c += a es equivalente a c = c + a |
-= | Operador de asignación de sustracción, asigna el resultado de restar el operando derecho al operando izquierdo al operando izquierdo | c -= a es equivalente a c = c - a |
*= | Operador de asignación de multiplicación, asigna el resultado de multiplicar el operando derecho por el operando izquierdo al operando izquierdo | c *= a es equivalente a c = c * a |
/= | Operador de asignación de división, asigna el resultado de dividir el operando izquierdo por el operando derecho al operando izquierdo | c /= a es equivalente a c = c / a |
%= | Operador de asignación de módulo, asigna el módulo de dos operandos a la izquierda | c %= a es equivalente a c = c % a |
**= | Operador de exponente y asignación, realiza el cálculo de exponente y asigna el resultado al operando izquierdo | c **= a es equivalente a c = c ** a |
Ruby también admite la asignación paralela de variables. Esto permite que múltiples variables se inicialicen a través de una sola línea de código Ruby. Por ejemplo:
a = 10 b = 20 c = 30
La asignación paralela permite declarar más rápidamente:
a, b, c = 10, 20, 30
La asignación paralela es muy útil para intercambiar los valores de dos variables:
a, b = b, c
Los operadores de bits actúan sobre los bits y ejecutan las operaciones bit a bit.
Supongamos que si a = 60, y b = 13Ahora, en formato binario, se ven así:
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
La siguiente tabla enumera los operadores de bits soportados por Ruby.
Operador | Descripción | ejemplo |
---|---|---|
& | Si existe en ambos operandos, el operador AND binario copia un bit al resultado. | (a & b) se convertirá en 12es 0000 1100 |
| | Si existe en cualquier operando, el operador OR binario copia un bit al resultado. | (a | b) se convertirá en 61Es decir, 0011 1101 |
^ | Si existe en uno de los operandos pero no en ambos, el operador de XOR binario copia un bit al resultado. | (a ^ b) se convertirá en 49Es decir, 0011 0001 |
~ | El operador de complemento a dos binario es un operador unario, que tiene el efecto de "inversión", es decir, 0 se convierte en1,1en 0. | (~a) se convertirá en -61Es decir 1100 0011Es la forma de complemento a dos de un número binario con signo. |
<< | Operador de desplazamiento a la izquierda en binario. El valor del operando izquierdo se desplaza a la izquierda el número de posiciones especificado por el operando derecho. | a << 2 Se obtendrá 240, es decir 1111 0000 |
>> | Operador de desplazamiento a la derecha en binario. El valor del operando izquierdo se desplaza a la derecha el número de posiciones especificado por el operando derecho. | a >> 2 Se obtendrá 15es 0000 1111 |
La siguiente tabla enumera los operadores lógicos soportados por Ruby.
Supongamos que el valor de la variable a es 10La variable b tiene el valor de 20, entonces:
Operador | Descripción | ejemplo |
---|---|---|
and | Se llama operador lógico y. Si ambos operandos son verdaderos, la condición es verdadera. | (a and b) es verdadero. |
or | Se llama operador lógico o. Si cualquier uno de los operandos no es cero, la condición es verdadera. | (a or b) es verdadero. |
&& | Se llama operador lógico y. Si ambos operandos no son cero, la condición es verdadera. | (a && b) es verdadero. |
|| | Se llama operador lógico o. Si cualquier uno de los operandos no es cero, la condición es verdadera. | (a || b) es verdadero. |
! | Operador lógico de no. Se utiliza para invertir el estado lógico del operando. Si la condición es verdadera, el operador lógico de no lo convertirá en falso. | !(a && b) es falso. |
not | Operador lógico de no. Se utiliza para invertir el estado lógico del operando. Si la condición es verdadera, el operador lógico de no lo convertirá en falso. | not(a && b) es falso. |
Tener más de una operación se llama operador ternario. La primera calcula el valor verdadero o falso de la expresión, y luego según este resultado decide ejecutar una de las dos siguientes sentencias. La sintaxis del operador condicional es la siguiente:
Operador | Descripción | ejemplo |
---|---|---|
? : | expresión condicional | si la condición es verdadera ? entonces el valor es X : de lo contrario el valor es Y |
En Ruby, los rangos de secuencia se utilizan para crear una serie de valores consecutivos - Incluye el valor de inicio, el valor de final (según el caso) y los valores entre ellos.
En Ruby, estas secuencias se crean utilizando los operadores de rango ".." y "...". El rango en forma de puntos duros incluye tanto el valor de inicio como el valor de final, mientras que el rango en forma de puntos medios solo incluye el valor de inicio y no incluye el valor de final.
Operador | Descripción | ejemplo |
---|---|---|
.. | Crear un rango desde el punto de inicio hasta el punto de final (incluyendo el punto de final) | 1..10 Crear desde 1 a 10 de |
... | Crear un rango desde el punto de inicio hasta el punto de final (sin incluir el punto de final) | 1...10 Crear desde 1 a 9 de |
defined? es un operador especial que, en forma de llamada a método, determina si una expresión ha sido definida. Devuelve la cadena de descripción de la expresión, y si la expresión no está definida, devuelve nil.
Aquí hay varios usos del operador defined?
definido? variable # Si variable ya ha sido inicializada, es True
por ejemplo:
foo = 42 definido? foo # => "local"-variable" definido? $_ # => "global"-variable" definido? bar # => nil (no definido)
definido? method_call # Si el método ya está definido, es True
por ejemplo:
definido? puts # => "método" definido? puts(bar) # => nil (aquí bar no está definido) definido? unpack # => nil (aquí no está definido)
# Si existe un método que puede ser llamado por super, es True definido? super
por ejemplo:
definido? super # => "super" (si puede ser llamado) definido? super # => nil (si no puede ser llamado)
definido? yield # Si se ha pasado un bloque de código, es True
por ejemplo:
definido? yield # => "yield" (si se ha pasado un bloque) defined? yield # => nil (si no se pasa un bloque)}
Puedes llamar métodos dentro de una clase o módulo utilizando el nombre de la clase o módulo y .; puedes referirte a constantes dentro de una clase o módulo utilizando el nombre de la clase o módulo y ::.
:: es un operador unario, que permite definir constantes, ejemplos de métodos y métodos de clase dentro de una clase o módulo, y puede ser accedido desde cualquier lugar fuera de la clase o módulo.
Recuerda:En Ruby, las clases y métodos también pueden ser tratados como constantes.
Sólo tienes que añadir el nombre del constante antes de la expresión. :: Un prefijo, se puede devolver el objeto de clase o módulo apropiado.
Si el expresión antes de :: es el nombre de una clase o módulo, devuelve el valor de la constante correspondiente dentro de la clase o módulo; si no hay expresión de prefijo antes de ::, devuelve el valor de la constante correspondiente en la clase principal Object. .
Aquí hay dos ejemplos:
MR_COUNT = 0 # Definido en la clase principal Object module Foo MR_COUNT = 0 ::MR_COUNT = 1 # Establecer el recuento global 1 MR_COUNT = 2 # Establecer el recuento local 2 end puts MR_COUNT # Esto es la constante global puts Foo::MR_COUNT # Esto es la constante local de "Foo"
Segundo ejemplo:
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
La siguiente tabla enumera todos los operadores en orden de prioridad desde la más alta a la más baja.
Método | Operador | Descripción |
---|---|---|
es | :: | Operador de análisis constante |
es | [ ] [ ]= | Referencia de elemento, conjunto de elementos |
es | ** | Exponente |
es | ! ~ + - | Negación, complemento, adición y sustracción unaria (los nombres de los métodos de los últimos dos son +@ y -@) |
es | * / % | Multiplicación, división y módulo |
es | + - | Adición y sustracción |
es | >> << | Desplazamiento a la derecha y a la izquierda de bits |
es | & | AND bit |
es | ^ | | XOR y OR bit |
es | <= < > >= | Operadores de comparación |
es | <=> == === != =~ !~ | Operadores de comparación y coincidencia de patrones (no se pueden definir como métodos != y !~) |
&& | Y lógico | |
|| | O lógico | |
.. ... | Rango (inclusivo, no inclusivo) | |
? : | if ternario-then-else | |
= %= { /= -= += |= &= >>= <<= *= &&= ||= **= | Asignación | |
defined? | Verificar si el símbolo especificado está definido | |
not | Negación lógica | |
or and | Composición lógica |
Nota:Se identifica en la lista de métodos como es Los operadores son métodos, por lo tanto, pueden ser sobrecargados.