English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Manuale avanzato Ruby. Ad esempio, a + b viene interpretato come a.+(b), dove il metodo + del variabile a viene chiamato, b come parametro della chiamata di metodo.
Per ogni operatore (+ - * / % ** & | ^ << >> && ||) c'è un operatore di assegnazione abbreviato corrispondente (+= -= ecc.).
Supponiamo che il valore della variabile a sia 10 e il valore della variabile b sia 20, allora:
Operatore | Descrizione | Esempio |
---|---|---|
+ | Addizione - Aggiunge gli operandi da entrambi i lati dell'operatore | a + b otterrà 30 |
- | Sottrazione - Sottrae l'operando di destra dall'operando di sinistra | a - b otterrà -10 |
* | Moltiplicazione - Moltiplica gli operandi da entrambi i lati dell'operatore | a * b otterrà 200 |
/ | Divisione - Divide l'operando di sinistra per l'operando di destra | b / a otterrà 2 |
% | Modulo - Divide l'operando di sinistra per l'operando di destra, restituendo il resto | b % a otterrà 0 |
** | Esponenziale - Esegue un calcolo esponenziale | a**b otterrà 10 alla 20esima potenza |
Supponiamo che il valore della variabile a sia 10 e il valore della variabile b sia 20, allora:
Operatore | Descrizione | Esempio |
---|---|---|
== | Controlla se i valori degli operandi sono uguali, se lo sono, la condizione è vera. | (a == b) non è vero. |
!= | Controlla se i valori degli operandi sono uguali, se non lo sono, la condizione è vera. | (a != b) è vero. |
> | Controlla se il valore dell'operando di sinistra è maggiore del valore dell'operando di destra, se lo è, la condizione è vera. | (a > b) non è vero. |
< | Controlla se il valore dell'operando di sinistra è minore del valore dell'operando di destra, se lo è, la condizione è vera. | (a < b) è vero. |
>= | Controlla se il valore dell'operando di sinistra è maggiore o uguale al valore dell'operando di destra, se lo è, la condizione è vera. | (a >= b) non è vero. |
<= | Controlla se il valore dell'operands sinistro è minore o uguale al valore dell'operands destro, se lo è, la condizione è vera. | (a <= b) è vero. |
<=> | Operatore di confronto combinato. Se il primo operand è uguale al secondo operand, restituisce 0, se il primo operand è maggiore del secondo operand, restituisce 1, se il primo operand è minore del secondo operand, restituisce -1. | (a <=> b) restituisce -1. |
=== | usato per testare case Uguaglianza nel corpo della clausola when della sentenza. | (1...10) === 5 restituisce true. |
.eql? | Se il ricevente e i parametri hanno lo stesso tipo e lo stesso valore, restituisce true. | 1 == 1.0 restituisce true, ma 1.eql?(1.0) restituisce false. |
equal? | Se il ricevente e i parametri hanno lo stesso id dell'oggetto, restituisce true. | Se aObj è una copia di bObj, allora aObj == bObj restituisce true, a.equal?bObj restituisce false, ma a.equal?aObj restituisce true. |
Supponiamo che il valore della variabile a sia 10 e il valore della variabile b sia 20, allora:
Operatore | Descrizione | Esempio |
---|---|---|
= | Operatore di assegnamento semplice, assegna il valore dell'operands destro all'operands sinistro | c = a + b assegnerà il valore di a + b a c |
+= | Operatore di assegnamento somma, assegna il risultato della somma dell'operands destro con l'operands sinistro all'operands sinistro | c += a è equivalente a c = c + a |
-= | Operatore di assegnamento sottrazione, assegna il risultato della sottrazione dell'operands destro dall'operands sinistro all'operands sinistro | c -= a è equivalente a c = c - a |
*= | Operatore di assegnamento moltiplicazione, assegna il risultato della moltiplicazione dell'operands destro per l'operands sinistro all'operands sinistro | c *= a è equivalente a c = c * a |
/= | Operatore di assegnamento divisione, assegna il risultato della divisione dell'operands sinistro per l'operands destro all'operands sinistro | c /= a è equivalente a c = c / a |
%= | Operatore di assegnamento modulo, calcola il modulo dei due operands e assegna il risultato all'operands sinistro | c %= a è equivalente a c = c % a |
**= | Operatore di assegnamento esponenziale, esegue il calcolo esponenziale e assegna il risultato al operands sinistro | c **= a è equivalente a c = c ** a |
Ruby supporta anche l'assegnamento parallelo delle variabili. Questo permette di inizializzare più variabili in una singola riga di codice Ruby. Ad esempio:
a = 10 b = 20 c = 30
L'assegnamento parallelo può dichiarare più velocemente:
a, b, c = 10, 20, 30
L'assegnamento parallelo è molto utile anche per scambiare i valori di due variabili:
a, b = b, c
Gli operatori di bit operano sui bit e eseguono le operazioni bit per bit.
Supponiamo che se a = 60 e b = 13, ora li mostriamo in formato binario:
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011
La tabella seguente elenca gli operatori bit a bit supportati da Ruby.
Operatore | Descrizione | Esempio |
---|---|---|
& | Se esiste contemporaneamente in entrambi gli operandi, l'operatore AND binario copia un bit nel risultato. | (a & b) avrà un valore di 12, ossia 0000 1100 |
| | Se esiste in uno degli operandi, l'operatore OR binario copia un bit nel risultato. | (a | b) avrà un valore di 61, ossia 0011 1101 |
^ | Se esiste in uno degli operandi ma non in entrambi, l'operatore XOR binario copia un bit nel risultato. | (a ^ b) avrà un valore di 49, ossia 0011 0001 |
~ | L'operatore di complemento a due binario è un operatore unario che ha l'effetto di "inverter" i bit, ossia 0 diventa 1 e 1 diventa 0. | (~a) avrà un valore di -61, ossia 1100 0011, che è la forma di complemento a due di un numero binario con segno. |
<< | Operatore di spostamento a sinistra binario. Il valore del primo operando si sposta a sinistra di un numero di posizioni specificato dal secondo operando. | a << 2 avrà un valore di 240, ossia 1111 0000 |
>> | Operatore di spostamento a destra binario. Il valore del primo operando si sposta a destra di un numero di posizioni specificato dal secondo operando. | a >> 2 avrà un valore di 15, ossia 0000 1111 |
La tabella seguente elenca gli operatori logici supportati da Ruby.
Supponiamo che il valore della variabile a sia 10 e il valore della variabile b sia 20, allora:
Operatore | Descrizione | Esempio |
---|---|---|
and | Chiamato operatore logico e. Se entrambi gli operandi sono veri, la condizione è vera. | (a and b) è vero. |
or | Chiamato operatore logico o. Se almeno uno degli operandi è non zero, la condizione è vera. | (a or b) è vero. |
&& | Chiamato operatore logico e. Se entrambi gli operandi sono non zero, la condizione è vera. | (a && b) è vero. |
|| | Chiamato operatore logico o. Se almeno uno degli operandi è non zero, la condizione è vera. | (a || b) è vero. |
! | Chiamato operatore logico non. Serve per invertire lo stato logico dell'operando. Se la condizione è vera, l'operatore logico non la renderà falsa. | !(a && b) è falso. |
not | Chiamato operatore logico non. Serve per invertire lo stato logico dell'operando. Se la condizione è vera, l'operatore logico non la renderà falsa. | not(a && b) è falso. |
Esistono più di una operazioni chiamate operatori ternari. Il primo calcola il valore vero/falso dell'espressione, poi in base a questo risultato decide di eseguire una delle due istruzioni successive. La sintassi dell'operatore condizionale è la seguente:
Operatore | Descrizione | Esempio |
---|---|---|
? : | Espressione condizionale | Se la condizione è vera ? allora il valore è X : altrimenti il valore è Y |
In Ruby, gli intervalli di sequenza vengono utilizzati per creare una serie di valori consecutivi - includono il valore di inizio, il valore di fine (a seconda del caso) e i valori tra di loro.
In Ruby, queste sequenze sono create utilizzando gli operatori di intervallo ".." e "...". La forma a due punti crea un intervallo che contiene sia il valore di inizio che il valore di fine, mentre la forma a tre punti crea un intervallo che contiene solo il valore di inizio e non il valore di fine.
Operatore | Descrizione | Esempio |
---|---|---|
.. | Crea un intervallo da un punto di inizio a un punto di fine (incluso il punto di fine) | 1..10 crea un intervallo da 1 a 10 |
... | Crea un intervallo da un punto di inizio a un punto di fine (escluso il punto di fine) | 1...10 crea un intervallo da 1 a 9 |
defined? è un operatore speciale che, sotto forma di chiamata di metodo, determina se un'espressione è definita. Restituisce la stringa di descrizione dell'espressione, se l'espressione non è definita restituisce nil.
Di seguito sono elencati vari usi dell'operatore defined?
definito? variable # => True se variable è stata inizializzata
Ad esempio:
foo = 42 definito? foo # => "variabile-locale" definito? $_ # => "variabile-globale" definito? bar # => nil (non definito)
definito? method_call # => True se il metodo è già definito
Ad esempio:
definito? puts # => "method" definito? puts(bar) # => nil (bar non definito qui) definito? unpack # => nil (non definito qui)
# => True se esiste un metodo che può essere chiamato con super definito? super
Ad esempio:
definito? super # => "super" (se può essere chiamato) definito? super # => nil (se non può essere chiamato)
definito? yield # => True se è stato passato un blocco di codice
Ad esempio:
definito? yield # => "yield" (se è stato passato un blocco) definito? yield # => nil (se non è stato passato un blocco)
Puoi chiamare i metodi di una classe o modulo aggiungendo il nome della classe o modulo e . al nome del metodo. Puoi anche utilizzare il nome della classe o modulo e due duepunti :: per riferirti a costanti all'interno della classe o modulo.
:: è un operatore unario, che permette di definire costanti, esempi di metodo e metodi di classe all'interno di una classe o modulo, accessibili da qualsiasi parte fuori dalla classe o modulo.
Ricorda:In Ruby, le classi e i metodi possono essere trattati come costanti.
Ti basta aggiungere il nome del costante all'inizio dell'espressione. :: Un prefisso, si può restituire l'oggetto appropriato della classe o modulo.
Se l'espressione prima di :: è il nome di una classe o modulo, restituisce il valore della costante corrispondente all'interno della classe o modulo; se non c'è un'espressione prefissa prima di ::, restituisce il valore della costante corrispondente nel tipo Object principale. .
Ecco due esempi:
MR_COUNT = 0 # Definita nel tipo Object principale module Foo MR_COUNT = 0 ::MR_COUNT = 1 # Imposta il conteggio globale a 1 MR_COUNT = 2 # Imposta il conteggio locale a 2 end puts MR_COUNT # Questa è la costante globale puts Foo::MR_COUNT # Questa è la costante locale di "Foo"
Secondo esempio:
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 seguente tabella elenca tutti gli operatori in ordine di priorità, da alta a bassa.
Metodo | Operatore | Descrizione |
---|---|---|
È | :: | Operatore di解析 costante |
È | [ ] [ ]= | Riferimento all'elemento, insieme di elementi |
È | ** | Indice |
È | ! ~ + - | Negazione, complemento, unario addizione, unario sottrazione (i nomi dei metodi degli ultimi due sono +@ e -@) |
È | * / % | Moltiplicazione, divisione, modulo |
È | + - | Addizione e sottrazione |
È | >>> << | Spostamento a destra, spostamento a sinistra |
È | & | AND |
È | ^ | | Operatore XOR, OR |
È | <= < > >= | Operatore di confronto |
È | <=> == === != =~ !~ | Operatore di uguaglianza e di abbinamento di modello (!= e !~ non possono essere definiti come metodi) |
&& | E logico | |
|| | Orologio logico | |
.. ... | Range (incluso, non incluso) | |
? : | Ternario if-then-else | |
= %= { /= -= += |= &= >>= <<= *= &&= ||= **= | Assegnazione | |
defined? | Controlla se il simbolo specificato è definito | |
not | Negazione logica | |
or and | Composizione logica |
Attenzione:È indicato nella lista dei metodi come È Gli operatori sono effettivamente metodi, quindi possono essere sovrascritti.