运算符是执行对变量和值的操作的特殊符号。例如,
puts 5 + 6 # Output: 11
这里,+
是一个运算符,它将两个数字:5 和 6 相加。
Ruby 运算符的类型
以下是我们将在此教程中学习的各种 Ruby 运算符的列表
- 算术运算符
- 赋值运算符
- 比较运算符
- 逻辑运算符
- 位运算符
- 三元运算符
算术运算符
算术运算符用于执行加法、减法、乘法等数学运算。例如:
mult = 2 * 5
puts mult # Output: 10
这里,*
是一个算术运算符,用于将两个值 **2** 和 **5** 相乘。
一些常用的算术运算符是
运算符 | 操作 | 示例 | 结果 |
---|---|---|---|
+ |
加法 | 5 + 2 |
7 |
- |
减法 | 4 - 2 |
2 |
* |
乘法 | 2 * 3 |
6 |
/ |
除法 | 4 / 2 |
2 |
% |
取模 | 5 % 2 |
1 |
** |
乘方 | 4 ** 2 |
16 |
示例 1:算术运算符
让我们通过一个示例来了解各种算术运算符是如何工作的。
a = 7
b = 2
# Addition
puts a + b # Output: 9
# Subtraction
puts a - b # Output: 5
# Multiplication
puts a * b # Output: 14
# Division
# Ruby performs integer division when both values are integers.
# So,it returns only the whole number part.
puts a / b # Output: 3
# Modulo
puts a % b # Output: 1
# Exponentiation
puts a ** b # Output: 49
赋值运算符
赋值运算符 =
用于将值赋给变量。例如,
# Assigns 5 to num
num = 5
puts num
输出
5
在这里,我们使用 =
运算符将值 **5** 赋给了变量 num
。
Ruby 中一些常用的赋值运算符是
运算符 | 名称 | 示例 |
---|---|---|
= |
赋值运算符 | a = 7 ( a 的值为 **7**) |
+= |
加法赋值 | a += 5 (相当于 a = a + 5 ) |
-= |
减法赋值 | a -= 2 (相当于 a = a - 2 ) |
*= |
乘法赋值 | a *= 3 (相当于 a = a * 3 ) |
/= |
除法赋值 | a /= 2 (相当于 a = a / 2 ) |
%= |
余数赋值 | a %= 4 (相当于 a = a % 4 ) |
**= |
乘方赋值 | a **= 2 (相当于 a = a ** 2 ) |
示例 2:赋值运算符
# Using Assignment Operator
num = 7
# Using Addition Assignment
num += 5
puts "After += 5: #{num}"
# Using Subtraction Assignment
num -= 2
puts "After -= 2: #{num}"
# Using Multiplication Assignment
num *= 3
puts "After *= 3: #{num}"
# Using Division Assignment
num /= 2
puts "After /= 2: #{num}"
# Using Remainder Assignment
num %= 4
puts "After %= 4: #{num}"
# Using Exponentiation Assignment
num **= 2
puts "After **= 2: #{num}"
输出
After += 5: 12 After -= 2: 10 After *= 3: 30 After /= 2: 15 After %= 4: 3 After **= 2: 9
在这里,每次赋值后,num 的值都会改变,并且新的值将在下一步中使用。
比较运算符
比较运算符比较两个值,并根据比较结果返回一个布尔值(true
或 false
)。例如,
a = 2
b = 5
# Checks if 'a' is less than 'b'
puts a < b
# Output: true
在这里,我们使用了 **小于** (<
) 比较运算符来比较 a
和 b
的值。由于 **2** 小于 **5**,所以表达式 a < b
的结果为 true
。
一些常用的比较运算符是
运算符 | 名称 | 示例 | 结果 |
---|---|---|---|
== |
等于 | 3 == 5 |
false |
!= |
不等于 | 3 != 4 |
true |
> |
大于 | 4 > 4 |
false |
< |
小于 | 3 < 3 |
false |
>= |
大于或等于 | 4 >= 4 |
true |
<= |
小于或等于 | 3 <= 3 |
true |
<=> |
组合比较(返回 **-1**、**0** 或 **1**) | 5 <=> 10 |
-1 |
示例 3:比较运算符
a = 5
b = 2
# Equal to operator
puts "#{a} == #{b} is #{a == b}"
# Not equal to operator
puts "#{a} != #{b} is #{a != b}"
# Greater than operator
puts "#{a} > #{b} is #{a > b}"
# Less than operator
puts "#{a} < #{b} is #{a < b}"
# Greater than or equal to operator
puts "#{a} >= #{b} is #{a >= b}"
# Less than or equal to operator
puts "#{a} <= #{b} is #{a <= b}"
# Combined comparison operator
puts "#{a} <=> #{b} is #{a <=> b}"
输出
5 == 2 is false 5 != 2 is true 5 > 2 is true 5 < 2 is false 5 >= 2 is true 5 <= 2 is false 5 <=> 2 is 1
逻辑运算符
逻辑运算符用于检查表达式是 true
还是 false
。它们用于决策。例如,
a = 3
b = 6
puts (a > 2) && (b >= 6) # Output: true
在这里,我们使用了逻辑 **AND** 运算符 (&&
)。由于 a > 2
和 b >= 6
都为 true
,所以结果为 true。
常用的逻辑运算符是
运算符 | 语法 | 描述 |
---|---|---|
&& (逻辑 AND) |
a && b |
仅当 a 和 b 都为 true 时返回 true 。 |
|| (逻辑 OR) |
a || b |
如果 a 或 b 中有一个为 true ,则返回 true 。 |
! (逻辑 NOT) |
!a |
如果 a 为 true ,则返回 false ,反之亦然。 |
示例 4:逻辑运算符
# Logical AND
has_password = true
has_username = true
can_login = has_password && has_username
puts "Can login: #{can_login}"
# Logical OR
is_weekday = false
is_holiday = true
can_relax = is_weekday || is_holiday
puts "Can relax: #{can_relax}"
# Logical NOT
is_busy = false
is_free = !is_busy
puts "Is free: #{is_free}"
输出
Can login: true Can relax: true Is free: true
这里,
表达式 | 结果 | 原因 |
---|---|---|
has_password && has_username |
true |
has_password 和 has_username 都为 true 。 |
is_weekday || is_holiday |
true |
is_weekday 为 false ,但由于 is_holiday 为 true ,所以 **OR** 运算符返回 true 。 |
!is_busy |
true |
is_busy 为 false ,**NOT** 运算符将 false 转换为 true 。 |
位运算符
位运算符作用于操作数,就好像它们是二进制数字字符串一样。它们逐位操作,因此得名。
在下表中
设 a = **10**(二进制为 0000 1010
)和 b = **4**(二进制为 0000 0100
)
运算符 | 语法 | 描述 |
---|---|---|
& (按位与) |
a & b |
0 (0000 0000 )复制 a 和 b 中都为 1 的位 |
| (按位或) |
a | b |
14 (0000 1110 )复制 a 或 b 中任一个为 1 的位 |
~ (按位非) |
~a |
-11 (1111 0101 )翻转 a 中的所有位 |
^ (按位异或) |
a ^ b |
14 (0000 1110 )复制 a 和 b 中只有一个为 1 的位 |
>> (按位右移) |
a >> 2 |
2 (0000 0010 )将 a 右移 2 位 |
<< (按位左移) |
a << 2 |
40 (0010 1000 )将 a 左移 2 位 |
注意:为清晰起见,二进制值以 **8 位** 格式显示。Ruby 使用任意精度整数,因此实际存储可能不同。
三元运算符
Ruby 中的三元运算符包含三个部分:**
- 一个条件。
- 如果条件为
true
要执行的表达式。 - 如果条件为
false
要执行的另一个表达式。
三元运算符的语法是
condition ? Expression1 : Expression2
让我们来看一个三元运算符的简单示例。
age = 18
can_vote = age >= 18 ? "Yes, you can vote." : "No, you cannot vote."
puts can_vote
输出
Yes, you can vote.
这里,
- 条件:
age >= 18
检查age
是否 **18** 或更大。 - 表达式1: 如果条件为
true
,则返回"Yes, you can vote."
。 - 表达式2: 如果条件为
false
,则返回"No, you cannot vote."
。
特殊运算符
在 Ruby 中,范围运算符用于创建从起始点到终点的值的序列。有两种类型的范围运算符:
运算符 | 描述 | 示例 |
---|---|---|
包含范围 (.. ) |
包含结束值。 | 1..5 → 1, 2, 3, 4, 5 |
排除范围 (... ) |
排除结束值。 | 1...5 → 1, 2, 3, 4 |
点 (.
) 运算符用于调用对象上的方法。例如,
greeting = "hello"
puts greeting.upcase # Output: HELLO
在这里,.upcase
调用字符串 "hello"
上的 upcase
方法。
双冒号 (::
) 运算符用于访问定义在另一个模块或类中的常量、类或模块。例如,
puts Math::PI # Output: 3.141592653589793
defined?
运算符检查变量、方法或常量是否存在。如果已定义,则返回一个字符串;如果未定义,则返回 nil
。例如,
x = 10
puts defined? x # Output: local-variable
puts defined? puts # Output: method
puts defined? y # Output: nil
在 Ruby 中,如果 defined?
返回 nil
,puts
将不打印任何内容,因为没有要打印的内容。