ruby学习笔记:[Ruby 学习笔记] 4. 标准类型



  Ruby 标准类型包括数字(Numeric)、串(String)、区间(Range)以及正则表达式(Regexp)这似乎和我们以及熟悉标准类型概念有点区别区间还好说正则如何成了标准类型了? [Ruby 学习笔记] 4. 标准类型

  数字

  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]+/) # 返回所有匹配




Tags:  ruby学习笔记

延伸阅读

最新评论

发表评论