好的!以下是关于 Ruby 运算符 的详细讲解。Ruby 提供了丰富的运算符,用于数学计算、比较、逻辑判断和位操作等。运算符在 Ruby 中非常灵活,许多都可以作用于不同数据类型(如数字、字符串)。我会逐一介绍主要运算符类型,结合中文示例,帮助你掌握它们的用法。


1. 算术运算符

用于数学计算。

运算符功能示例结果
+加法5 + 38
-减法10 - 46
*乘法2 * 36
/除法10 / 25
%取模7 % 31
**幂运算2 ** 38

示例

puts 5 + 3      # 8
puts 10 / 3     # 3(整数除法,结果取整)
puts 10.0 / 3   # 3.3333333333333335(浮点数除法)
puts 2 ** 4     # 16

注意

  • 整数除法返回整数,浮点数除法返回浮点数。
  • 字符串也能用 + 连接:
  puts "你" + "好"  # 你好

2. 比较运算符

用于比较两个值,返回布尔值(truefalse)。

运算符功能示例结果
==等于5 == 5true
!=不等于5 != 3true
<小于3 < 5true
>大于5 > 3true
<=小于等于5 <= 5true
>=大于等于3 >= 4false
<=>太空船运算符5 <=> 31

<=> 说明

  • 返回 -1(小于)、0(等于)、1(大于),常用于排序:
  puts 5 <=> 5   # 0
  puts 3 <=> 5   # -1
  puts 5 <=> 3   # 1

示例

puts 5 == "5".to_i  # true
puts "你" < "好"     # true(按字典序比较)
puts 10 >= 7        # true

3. 赋值运算符

用于给变量赋值,或结合运算简化代码。

运算符功能示例等价于
=赋值x = 10
+=加并赋值x += 5x = x + 5
-=减并赋值x -= 3x = x - 3
*=乘并赋值x *= 2x = x * 2
/=除并赋值x /= 2x = x / 2
%=取模并赋值x %= 3x = x % 3
**=幂并赋值x **= 2x = x ** 2

示例

x = 10
x += 5
puts x     # 15
x *= 2
puts x     # 30

4. 逻辑运算符

用于组合条件,返回布尔值。

运算符功能示例结果
&&true && falsefalse
||true || falsetrue
!!truefalse
and与(低优先级)true and falsefalse
or或(低优先级)true or falsetrue
not非(低优先级)not truefalse

示例

age = 20
puts age > 18 && age < 30  # true
puts age < 10 || age > 15  # true
puts !false                # true

&& vs and

  • && 优先级高于 and,建议用 &&
  puts true and false || true  # true(and 先计算)
  puts true && false || true   # true(&& 先计算)

5. 位运算符

用于操作二进制位。

运算符功能示例结果
&按位与5 & 31
|按位或5 | 37
^按位异或5 ^ 36
~按位取反~5-6
<<左移5 << 110
>>右移5 >> 12

示例

puts 5 & 3    # 1(0101 & 0011 = 0001)
puts 5 | 3    # 7(0101 | 0011 = 0111)
puts 5 << 1   # 10(0101 左移 = 1010)

6. 三元运算符

简洁的条件表达式:条件 ? 值1 : 值2

示例

age = 16
status = age >= 18 ? "成人" : "未成年"
puts status  # 未成年

7. 范围运算符

用于创建范围对象。

运算符功能示例结果
..包含两端1..3[1, 2, 3]
...不含结束端1...3[1, 2]

示例

puts (1..3).to_a  # [1, 2, 3]
puts (1...3).to_a # [1, 2]

8. 特殊运算符

defined?

检查变量或方法是否定义:

x = 10
puts defined?(x)     # local-variable
puts defined?(y)     # nil
puts defined?(puts)  # method

||=

“或等于”,仅在变量为 nilfalse 时赋值:

x ||= 5    # x 未定义,赋值为 5
puts x     # 5
x ||= 10   # x 已为 5,不变
puts x     # 5

*(拆包/打包)

用于数组操作:

a, *b = [1, 2, 3, 4]
puts a    # 1
puts b    # [2, 3, 4]

9. 中文支持示例

运算符对中文字符串也适用:

puts "你" + "好"         # 你好
puts "你好" == "你好"    # true
puts "你" < "好"         # true(按 Unicode 顺序)

实践案例

价格 = 100
折扣 = 0.8
puts 价格 * 折扣        # 80.0
puts 价格 >= 50 ? "贵" : "便宜"  # 贵

10. 注意事项

  • 优先级:运算符有优先级,例如 * 高于 +,可用括号 () 明确顺序:
  puts 2 + 3 * 4    # 14
  puts (2 + 3) * 4  # 20
  • 类型转换:运算符可能自动转换类型(如整数到浮点数),但某些操作需手动转换:
  puts "5" + 3    # 错误
  puts "5".to_i + 3  # 8

下一步

  • 练习:告诉我你想试哪类运算符(算术、逻辑等),我可以设计一个例子。
  • 问题解答:对某个运算符用法有疑问吗?直接问我!
  • 深入学习:想了解运算符重载或自定义运算符吗?我可以继续讲解。

你现在想做什么?写代码、问问题,还是其他?