Ruby 标准类型包括数字(Numeric)、串(String)、区间(Range)以及正则表达式(Regexp)这似乎和我们以及熟悉标准类型概念有点区别区间还好说正则如何成了标准类型了?
数字
Ruby 数字包括整数(Integer)和浮点数(Float)这些类型都直接或间接继承自 NumericRuby 整数并没有长度限制定范围内整数是 Fixnum 对象当超出该范围则会自动转换成 Bignum
Fixnum < Integer < Numeric
Bignum < Integer < Numeric
Float < Numeric
i = 123
puts i.
i = 123 ** 123
puts i.
i = 1
puts i.
输出:
Fixnum
Bignum
Fixnum
浮点数并没有这么复杂所有浮点数类型都是 Float无论它有多长
f = 123.45
puts f.
f = 1235743954325432875984372594372957439254.455432543254325432545254325432
puts f.
输出:
Float
Float
和所有语言样我们可以通过前导符号标定数字格式
0 : 8进制0377
0d : 十进制
0x : 十 6进制 0xaabb
0b : 2进制0b100111100
比较有意思是我们可以用下划线(_)来分隔数字
a = 123_456_789 # 类似我们习惯 123,456,789
puts a
"?x" 和 "?\cx(或 ?\C-x)" 分别用于显示或控制整数值
puts ?a
puts ?\n
puts ?\r
puts ?\ca # Ctrl + a
串
Ruby 串由 8bit 字节序列组成串定义方式有很多种~~~ (真不知道是如何想?)
简单点是用单引号或双引号当然包括我们熟悉转义符
s = 'That\'s Right!'
s = 'escape using "\\"'
s = "Hello, World!"
其中双引号串内部可以使用 #{expr}这是个非常有趣功能显然比 C# String.Format 更方便点
$s = "Tom"
name = "Jack"
puts "My name is #{name}" # 局部变量
puts "Your name is #$s" # 全局变量可省略大括号
puts "1 + 2 + 3 = #{1+2+3}" # 表达式
另外还有更奇怪%q 相当于单引号%Q 相当于双引号还有 "here documents"这些标记都通过特定分界标记来定义串
$s = "Tom"
name = "Jack"
puts %q/My name is #{name}/
puts %Q|Your name is #$s|
puts <<START, <<END
START
1 + 2 + 3 = #{1+2+3}
1 + 2 + 3 = #{1+2+3}
1 + 2 + 3 = #{1+2+3}
END
串类 String 提供了大量操作思路方法细节可参考类库文档
区间
区间表示种序列在 Ruby 中使用 ".." 表示闭区间而使用 "..." 表示半闭半开区间区别在于闭区间包含右端值而半闭半开区间则不包含
puts (1..3).to_a
puts "--------------"
puts (1...3).to_a
输出
1
2
3
--------------
1
2
区间不仅仅是整数也可以是串等
puts ("a".."z").to_a
区间类型 Range 提供了很多操作思路方法
r = 1..9
puts r.min
puts r.max
puts r.?(2)
puts r = 2 # 和 ? 作用相同
正则表达式
Ruby 在语言层面提供了正则表达式支持我们可以用下面 3种思路方法创建 Regexp 对象
a = Regexp.('[\d]+')
b = /[\d]+/
puts b.
c = %r{[\d]+}
puts c.
输出:
Regexp
Regexp
我们可以用操作符 "=~" 来完成匹配(Match)操作(操作副 "!~" 和此作用相反是否定匹配)
s = "Number: 100234, ..."
puts s =~ /[\d]+/
puts {$selection}amp; # 返回匹配串 "100234"
puts
# 返回匹配的前串 "Number: "
puts # 返回匹配的后串 ", ..."
"$~" 返回 MatchData 对象其中包含匹配长度、偏移量等所有信息类似 C# Match除此的外我们同样可以操作组(Group)
s = "Number: 100234,234 ..."
puts s =~ /([\d]+),([\d]+)/
puts {$selection}amp; # 返回匹配串
puts $1 # Group1 "100234"
puts $2 # Group2 "234"
在 Ruby String 类中很多思路方法直接支持正则操作
s = "Hello, World!"
puts s.sub(/World/, 'ruby') # 替换
s = "123,456,78"
puts s.scan(/[\d]+/) # 返回所有匹配
最新评论