Ruby 数据类型
数据类型决定了一个变量所持有值的种类。
Ruby 作为一门动态类型语言,不需要你显式地声明变量的数据类型。Ruby 解释器会根据赋给变量的值自动推断出其数据类型。
在本章中,我们将探索 Ruby 中的三个核心数据类型:数字 (Numbers)、字符串 (Strings) 和 布尔值 (Booleans)。
1. Ruby 中的数字 (Numbers)
Ruby 中的数字用于表示数值,主要分为两大类:整数 (Integers) 和 浮点数 (Floating-Point Numbers)。
1.1 整数 (Integers)
整数是没有小数部分的完整数字。
(注:在 Ruby 2.4 之前,整数被分为 Fixnum 和 Bignum。但从 2.4 版本开始,它们被统一到了单一的 Integer 类中。你无需担心区分它们,Ruby 会自动为你处理内存大小。)
# 整数示例
age = 30
quantity = 100
negative_number = -5你可以对整数执行各种算术运算:加法、减法、乘法、除法和取模(求余数)。
a = 10
b = 5
sum = a + b # 加法: 15
difference = a - b # 减法: 5
product = a * b # 乘法: 50
quotient = a / b # 除法: 2 (注意:整数除法会直接舍去小数部分)
modulo = a % b # 取模 (求余数): 01.2 浮点数 (Floating-Point Numbers)
浮点数是带有小数部分的数字。它们是 Float 类的实例。
# 浮点数示例
price = 19.99
temperature = 25.5
pi = 3.14159浮点数的算术运算与整数类似,但会保留小数部分。
x = 10.0
y = 3.0
sum = x + y # 加法: 13.0
difference = x - y # 减法: 7.0
product = x * y # 乘法: 30.0
quotient = x / y # 除法: 3.33333333333333351.3 常用的数字运算方法
Ruby 提供了丰富的内置方法来处理数字。以下是一些非常有用的方法:
abs: 返回数字的绝对值。round: 将浮点数四舍五入为最接近的整数。floor: 向下取整(返回小于或等于该数字的最大整数)。ceil: 向上取整(返回大于或等于该数字的最小整数)。
number = -7.5
absolute_value = number.abs # 绝对值: 7.5
rounded_value = number.round # 四舍五入: -8 (注意负数的四舍五入规则)
floor_value = number.floor # 向下取整: -8
ceil_value = number.ceil # 向上取整: -72. Ruby 中的字符串 (Strings)
字符串代表字符的序列。它们是 String 类的实例,用于存储和操作文本。你可以使用单引号 (') 或 双引号 (") 来创建字符串。
2.1 单引号字符串
单引号字符串几乎会原样输出你输入的内容。它只解析两个特殊的转义字符:\' (输出单引号) 和 \\ (输出反斜杠)。
# 单引号字符串示例
name = 'Alice'
message = 'Hello, world!'
escaped_quote = '这是一个 \'单引号\' 字符串。'
escaped_backslash = '这是一个反斜杠:\\'2.2 双引号字符串与字符串插值
双引号字符串更加强大。它不仅支持多种转义字符(如 \n 表示换行,\t 表示制表符),最重要的是,它支持字符串插值 (String Interpolation)。
字符串插值允许你使用 #{} 语法,将 Ruby 表达式的结果直接嵌入到字符串中。
# 双引号字符串示例
name = "Bob"
greeting = "Hello, #{name}!" # 字符串插值:结果为 "Hello, Bob!"
newline = "这是第一行\n这是第二行"
# 更复杂的插值
age = 30
message = "我今年 #{age} 岁了。"
x = 5
y = 10
sum_message = "#{x} 加 #{y} 的结果是 #{x + y}。" # 内部可以直接进行数学运算2.3 常用的字符串操作
- 拼接 (Concatenation): 将多个字符串连接在一起(使用
+号)。 - 截取 (Substring): 提取字符串的一部分(使用索引范围)。
- 长度 (Length): 获取字符串包含的字符数(使用
.length方法)。 - 大小写转换: 改变字母的大小写(使用
.upcase或.downcase)。
first_name = "John"
last_name = "Doe"
full_name = first_name + " " + last_name # 拼接: "John Doe"
substring = full_name[0..3] # 截取 (索引 0 到 3): "John"
length = full_name.length # 长度: 8
uppercase = full_name.upcase # 转大写: "JOHN DOE"
lowercase = full_name.downcase # 转小写: "john doe"3. Ruby 中的布尔值 (Booleans)
布尔值代表逻辑上的真或假:即 true 或 false。它们分别是 TrueClass 和 FalseClass 的实例。
布尔值是编程中进行决策的基础,广泛应用于条件判断和逻辑运算中。
# 布尔值示例
is_valid = true
is_empty = false3.1 逻辑运算符
Ruby 提供了逻辑运算符来组合和操作布尔值:
&&(逻辑与 AND): 只有当两边的操作数都为true时,结果才返回true。||(逻辑或 OR): 只要两边的操作数中至少有一个为true,结果就返回true。!(逻辑非 NOT): 反转操作数的值(true变false,false变true)。
a = true
b = false
result_and = a && b # false (true AND false)
result_or = a || b # true (true OR false)
result_not_a = !a # false (NOT true)3.2 比较运算符
比较运算符用于比较两个值,并返回一个布尔结果(true 或 false)。
==: 等于!=: 不等于>: 大于<: 小于>=: 大于或等于<=: 小于或等于
x = 10
y = 5
is_equal = x == y # false
is_not_equal = x != y # true
is_greater = x > y # true
is_less = x < y # false3.3 重要概念:真值与假值 (Truthiness and Falsiness)
在 Ruby 中,有一个极其重要的规则:只有 false 和 nil(一个代表“空”或“不存在”的特殊值)被认为是“假值 (falsy)”。
除了这两个之外,所有其他的一切——包括数字 0、空字符串 ""、甚至空数组——在条件判断中都被认为是 “真值 (truthy)”。
# 只有 false 和 nil 不会执行 if 里面的代码
if 0
puts "数字 0 是真值" # 这行会被打印
end
if ""
puts "空字符串也是真值" # 这行会被打印
end
if nil
puts "nil 是假值" # 这行 不会 被打印
end
if false
puts "false 显然是假值" # 这行 不会 被打印
end