Ruby 数据类型概述
Ruby 是一种动态类型语言,所有数据类型都是对象。主要数据类型包括基本类型、集合类型和特殊类型。
基本数据类型
整数(Integer) 分为 Fixnum(小整数)和 Bignum(大整数),Ruby 2.4+ 后统一为 Integer 类。支持十进制、十六进制(0x)、八进制(0)和二进制(0b)表示法。
ruby
42 # 十进制
0x2A # 十六进制
052 # 八进制
0b101010 # 二进制
浮点数(Float) 表示带小数点的数字,默认双精度。
ruby
3.14
2.0e-3 # 科学计数法
字符串(String) 使用单引号或双引号定义,支持插值(仅双引号)和转义字符。
ruby
'单引号不插值 #{1+2}' # 输出原样
"双引号插值 #{1+2}" # 输出 "双引号插值 3"
布尔值(Boolean) true 和 false 是特殊对象,nil 表示空值(属于 NilClass)。
符号(Symbol) 轻量级不可变字符串,以冒号开头,常用于哈希键或标识符。
ruby
:ruby
:"dynamic symbol"
集合数据类型
数组(Array) 有序集合,通过索引访问,可混合存储不同类型元素。
ruby
arr = [1, "two", :three, 4.0]
arr[1] # => "two"
哈希(Hash) 键值对集合,键可以是任意对象(常用 Symbol 或 String)。
ruby
hash = { name: "Ruby", version: 3.2 }
hash[:name] # => "Ruby"
范围(Range) 表示连续值序列,常用于迭代或条件判断。
ruby
(1..10).include?(5) # => true
('a'..'z').to_a # 生成字母数组
特殊数据类型
正则表达式(Regexp) 用于模式匹配,通过 / 定义。
ruby
/\d+/ =~ "2023" # 匹配成功返回索引 0
时间(Time) 表示日期和时间。
ruby
Time.now # 当前时间
类型转换方法
Ruby 提供显式转换方法:
ruby
"123".to_i # 字符串转整数
3.14.to_s # 浮点数转字符串
:name.to_s # 符号转字符串
"name".to_sym # 字符串转符号
动态类型特性
变量无需声明类型,运行时自动确定。可通过 class 方法查看对象类型:
ruby
42.class # => Integer
"hello".class # => String
nil.class # => NilClass
注意事项
- 字符串冻结(
freeze)可提高性能,避免重复创建相同字符串。 - 符号比字符串更高效,但不适合动态生成场景。
- 大整数自动处理,无需担心溢出问题。