Opérateurs Ruby
Ruby prend en charge un riche ensemble d'opérateurs. La plupart des opérateurs sont en réalité des appels de méthode. Par exemple, a + b est interprété comme a.+(b), où la méthode + pointant vers la variable a est appelée avec b comme argument de l'appel de méthode.
Pour chaque opérateur (+ - * / % ** & | ^ << >> && ||), il existe un opérateur d'affectation abrégé correspondant (+= -= etc).
Opérateurs arithmétiques Ruby
Supposons que la valeur de la variable a soit 10 et la valeur de la variable b soit 20, alors :
运算符 | 描述 | 实例 |
---|---|---|
+ | 加法 - 把运算符两边的操作数相加 | a + b 将得到 30 |
- | 减法 - 把左操作数减去右操作数 | a - b 将得到 -10 |
* | 乘法 - 把运算符两边的操作数相乘 | a * b 将得到 200 |
/ | 除法 - 把左操作数除以右操作数 | b / a 将得到 2 |
% | 求模 - 把左操作数除以右操作数,返回余数 | b % a 将得到 0 |
** | 指数 - 执行指数计算 | a**b 将得到 10 的 20 次方 |
Opérateur de comparaison Ruby
Supposons que la valeur de la variable a est 10 et la valeur de la variable b est 20, alors :
运算符 | 描述 | 实例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果相等则条件为真。 | (a == b) 不为真。 |
!= | 检查两个操作数的值是否相等,如果不相等则条件为真。 | (a != b) 为真。 |
> | 检查左操作数的值是否大于右操作数的值,如果是则条件为真。 | (a > b) 不为真。 |
< | 检查左操作数的值是否小于右操作数的值,如果是则条件为真。 | (a < b) 为真。 |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是则条件为真。 | (a >= b) 不为真。 |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是则条件为真。 | (a <= b) 为真。 |
<=> | 联合比较运算符。如果第一个操作数等于第二个操作数则返回 0,如果第一个操作数大于第二个操作数则返回 1,如果第一个操作数小于第二个操作数则返回 -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。 |
Opérateur d'affectation Ruby
Supposons que la valeur de la variable a soit 10 et la valeur de la variable b soit 20, alors :
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符,把右操作数的值赋给左操作数 | c = a + b 将把 a + b 的值赋给 c |
+= | 加且赋值运算符,把右操作数加上左操作数的结果赋值给左操作数 | c += a 相当于 c = c + a |
-= | 减且赋值运算符,把左操作数减去右操作数的结果赋值给左操作数 | c -= a 相当于 c = c - a |
*= | 乘且赋值运算符,把右操作数乘以左操作数的结果赋值给左操作数 | c *= a 相当于 c = c * a |
/= | 除且赋值运算符,把左操作数除以右操作数的结果赋值给左操作数 | c /= a 相当于 c = c / a |
%= | 求模且赋值运算符,求两个操作数的模赋值给左操作数 | c %= a 相当于 c = c % a |
**= | 指数且赋值运算符,执行指数计算,并赋值给左操作数 | c **= a 相当于 c = c ** a |
Assignation parallèle Ruby
Ruby prend également en charge l'affectation parallèle de variables. Cela permet d'initialiser plusieurs variables avec une seule ligne de code Ruby. Par exemple :
a = 10 b = 20 c = 30
Utilisez l'affectation parallèle pour déclarer plus rapidement :
a, b, c = 10, 20, 30
L'affectation parallèle est également utile lors de l'échange des valeurs de deux variables :
a, b = b, c
Opérateurs au niveau du bit Ruby
Les opérateurs au niveau du bit opèrent sur des bits et effectuent des opérations petit à petit.
Supposons que si a = 60 et b = 13, maintenant au format binaire, ils ressemblent à ceci :
a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^ b = 0011 0001
~a = 1100 0011
Le tableau suivant répertorie les opérateurs au niveau du bit pris en charge par Ruby.
运算符 | 描述 | 实例 |
---|---|---|
& | 如果同时存在于两个操作数中,二进制 AND 运算符复制一位到结果中。 | (a & b) 将得到 12,即为 0000 1100 |
| | 如果存在于任一操作数中,二进制 OR 运算符复制一位到结果中。 | (a | b) 将得到 61,即为 0011 1101 |
^ | 如果存在于其中一个操作数中但不同时存在于两个操作数中,二进制异或运算符复制一位到结果中。 | (a ^ b) 将得到 49,即为 0011 0001 |
~ | 二进制补码运算符是一元运算符,具有"翻转"位效果。 | (~a ) 将得到 -61,即为 1100 0011,2 的补码形式,带符号的二进制数。 |
<< | 二进制左移运算符。左操作数的值向左移动右操作数指定的位数。 | a << 2 将得到 240,即为 1111 0000 |
>> | 二进制右移运算符。左操作数的值向右移动右操作数指定的位数。 | a >> 2 将得到 15,即为 0000 1111 |
Opérateurs logiques Ruby
Le tableau suivant répertorie les opérateurs logiques pris en charge par Ruby.
Supposons que la valeur de la variable a est 10 et la valeur de la variable b est 20, alors :
运算符 | 描述 | 实例 |
---|---|---|
and | 称为逻辑与运算符。如果两个操作数都为真,则条件为真。 | (a and b) 为真。 |
or | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (a or b) 为真。 |
&& | 称为逻辑与运算符。如果两个操作数都非零,则条件为真。 | (a && b) 为真。 |
|| | 称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (a || b) 为真。 |
! | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | !(a && b) 为假。 |
not | 称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。 | not(a && b) 为假。 |
L'opérateur ternaire Ruby
a plus de une L'opération est appelée opérateur ternaire. Le premier calcule la valeur vraie ou fausse de l'expression, puis décide d'exécuter l'une des deux instructions suivantes en fonction de ce résultat. La syntaxe des opérateurs conditionnels est la suivante :
运算符 | 描述 | 实例 |
---|---|---|
? : | 条件表达式 | 如果条件为真 ? 则值为 X : 否则值为 Y |
Opérateurs de plage Ruby
Dans Ruby, les plages de séquences sont utilisées pour créer une série de valeurs consécutives - y compris le début valeur et la valeur finale (selon le cas) et les valeurs entre elles.
Dans Ruby, ces séquences sont créées à l'aide des opérateurs de plage ".." et "...". La plage créée par le formulaire en deux points contient la valeur de début et la valeur de fin, et la plage créée par le formulaire en trois points contient uniquement la valeur de début et n'inclut pas la valeur de fin.
运算符 | 描述 | 实例 |
---|---|---|
.. | 创建一个从开始点到结束点的范围(包含结束点) | 1..10 创建从 1 到 10 的范围 |
... | 创建一个从开始点到结束点的范围(不包含结束点) | 1...10 创建从 1 到 9 的范围 |
L'opérateur Ruby défini ?
défini ? est un opérateur spécial qui détermine si l'expression passée a été définie sous la forme d'un appel de méthode. Il renvoie une chaîne décrivant l'expression, ou nil si l'expression n'est pas définie.
Voici les différentes utilisations de l'opérateur défini ? :
Utilisation 1
defined? variable # 如果 variable 已经初始化,则为 True
Par exemple :
foo = 42 defined? foo # => "local-variable" defined? $_ # => "global-variable" defined? bar # => nil(未定义)
Utilisation 2
defined? method_call # 如果方法已经定义,则为 True
Par exemple :
defined? puts # => "method" defined? puts(bar) # => nil(在这里 bar 未定义) defined? unpack # => nil(在这里未定义)
Usage 3
# 如果存在可被 super 用户调用的方法,则为 True defined? super
Par exemple :
defined? super # => "super"(如果可被调用) defined? super # => nil(如果不可被调用)
Usage 4
defined? yield # 如果已传递代码块,则为 True
Par exemple :
defined? yield # => "yield"(如果已传递块) defined? yield # => nil(如果未传递块)
Ruby opérateur point" ." et l'opérateur double deux-points "::"
Vous pouvez appeler une méthode de module en faisant précéder le nom de la méthode par le nom du module et un trait de soulignement. Vous pouvez référencer une constante en utilisant le nom du module et deux points.
:: est un opérateur unaire qui permet de définir des constantes, des méthodes d'instance et des méthodes de classe au sein d'une classe ou d'un module et qui est accessible depuis n'importe où en dehors de la classe ou du module.
Rappelez-vous : Dans Ruby, les classes et les méthodes peuvent également être traitées comme des constantes.
Il vous suffit de préfixer le nom de constante de l'expression avec :: pour renvoyer l'objet de classe ou de module approprié.
Si aucune expression de préfixe n'est utilisée, la classe Object principale est utilisée par défaut.
Voici deux exemples :
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" 的局部常量
Le deuxième exemple :
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
Priorité des opérateurs Ruby
Le tableau suivant est basé sur la priorité des opérateurs Tous les opérateurs sont répertoriés du niveau le plus élevé au niveau le plus bas.
Méthode | Opérateur | Description | tr >||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
est | :: | Opérateur d'analyse constante | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
est | [ ] [ ]= | Référence d'élément, collection d'éléments | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
est | ** | index td> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oui | ~ + - | Non, complément, addition d'un yuan, soustraction d'un yuan (les deux dernières méthodes sont nommé +@ et -@) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oui | * / % | Multiplication, division, module | tr>||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oui | + - | Addition et soustraction | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oui | >> << | Décalage de bit à droite, décalage de bit à gauche | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oui | & | < td>bit ET|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
est | ^ | | bit XOR, bit OU | Oui | <= < >= | Opérateur de comparaison | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Oui td> | <=> == === != =~ !~ | Les opérateurs d'égalité et de correspondance de modèles (!= et !~ ne peuvent pas être définis comme des méthodes) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| && | ET logique | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜> | || | OU logique | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜> | .. ... | Plage ( incluant, excluant) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜> | : | Ternaire si-alors-sinon td> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜> | = %= { /= -= += |= &= >>= <<= *= &&= ||= ** = | Affectation | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜> | définie ? | Vérifiez le symbole spécifié Est-il défini< /td> | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜> | pas | négation logique | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
<🎜> | ou et | composition logique |
Remarque : Les opérateurs identifiés comme dans la colonne méthode sont en fait des méthodes et peuvent donc être surchargés.