Ruby支持的数据类型包括基本的Number、String、Ranges、Symbols,以及true、false和nil这个几个特殊值,同时嗨哟两种重要的数据结构Array和Hash。
1.数字类型
Ruby中所有的数字都是Numberic类的实例,所有整数Integer的实例。Fixnum和Bignum之间的转换是透明的,Ruby利用Float来近似表示实数。
在这里多补充一下Fixnum和Bignum方便认识,Fixnum和Bignum是Integer的子类
Fixnum:内部用固定长度来实现的整数,能够高效地处理比较小的整数。
Bignum:多倍长的整数,可以用来定义任意大的整数。
程序中的整数一般都是在Fixnum范围内的,如果超过了Fixnum的范围,Ruby就会自动将其转换为Bignum类。
单纯的数字表示10进制,0b开头表示2进制,0或者0o开头表示8进制,0d开头表示10兼职,0x开头表示16进制。数字中的_会被自动忽略,不会影响数字值的显示。
2.字符串
- 单引号
单引号引入字符串面量来表示字符串,其中如果表示单引号,只需要在之前加入一个反斜线。就是C语言中的转义字符的意思
例如:
puts 'it\'s just a test'
输出结果:
it's just a test
如果表示反斜线,那就需要写两个反斜线
puts 'this is a \\'
输出结果:
this is a \
单引号字符串可以跨行,得到的字符串会包含换行符,也不能通过反斜线来转椅行尾的换行符。
puts 'This is a long string literal \
that include a backslash and a new line.'
输出结果:
This is a long string literal
that include a backslash and a new line.
如果不希望加入换行,那么只需要将其划分成为相邻的字符串字面量,同时在其尾部加入反斜线转义末尾的换行符就可以了
puts 'The three literal are ' \
'concatenated into one by interpreter ' \
'The resulting string contains no newlines.'
输出结果:
The three literal are concatenated into one by interpreter The resulting string contains no newlines.
- 双引号
双引号引用的字符串字面量则支持更多的转义,比如换行\n,制表符\t和双引号"。同时支持Ruby特有的“字符串内插”
puts "The result is #{8 + 9}"
输出结果:
The result is 17
3.数组
Ruby数组可以用负值进行索引,如果赋值操作时使用负值超出范围会报错
ruby中支持一种更加通用的数组字面量特殊语法
puts %W|aaaaa ( [ { < |
输出结果:
aaaaa
(
[
{
<
puts %w[this is a test]
输出结果:
this
is
a
test
通过Array.new 构造函数来构造数组
array0 = Array.new #创建一个数组,返回[]
array1 = Array.new(20) #创建一个数组20个空间
array2 = Array.new(4,"ccc") #创建一个数组4个元素,每个都是ccc
array3 = Array.new(10){|e| e = e*2} #创建一个数组10个元素 公差是2 首项0
array4 = Array.[](1,2,3,4) #创建一个数组元素是1,2,3,4
array5 = Array[1,2,3,4,5] #创建一个数组元素是 1,2,3,4,5
array6 = Array(0..9) #创建一个数组元素是0-9
#输出结果可想而知
4.哈希
Ruby里的hash采用一种哈希表的数据结构来实现。可以理解为OC中的字典存储。那些作为哈希健的对象必须有一个hash的方法,该方法返回后一个Fixnum码的哈希码。如果两个键相同,那么它们必须具有相同的哈希码。不相等的键也可以拥有相同的哈希码,但是仅当哈希表有极少的重复事,其效率才是最高的。
# 空的哈希
months = Hash.new
# 默认值的哈希
months = Hash.new( "month" )
或
months = Hash.new "month"
# 有值的哈希
H = Hash["a" => 100, "b" => 200]
puts "#{H['a']}"
puts "#{H['b']}"
输出结果:
100
200
# 字面量特殊语法
numbers = {"one" => 1, "two" => 2}
puts "#{numbers['one']}"
puts "#{numbers['two']}"
输出结果:
1
2
5.符号
通过在一个标识符或字符串前面添加冒号的方式表示一个符号字面量。
Symbol看起来像一个没有引号的字符串前加了个冒号:myname 当然你也可以用冒号加引号的形式声明带空格的symbol。:'my name'or :"my name" Symbol是不变的,不可以像其他变量一样对它进行赋值运算。比如这样的写法是错误的:myname = "Tom"。 相反Symbol可以作为值赋给其他变量比如mystring = :myname。
例如:
:symbol
:"symbol"
:'another'
s = "string"
sym = :"#{s}"
6.True、False、Nil
True、False 和 Nil 分别是 TrueClass、FalseClass 和 NilClass 的单键实例。Ruby 中并没有 Boolean 类。
当 Ruby 需要一个布尔值时,nil 表现为 false,而 nil 和 false 之外的所有值都表现为 true。
o = nil
if o == nil
puts "o 为nil"
end
或者以下这种表达方式也可以
o = nil
if o.nil?
puts "o 为nil"
end
输出结果:
o 为nil
7.补充以下输出3种方式:
-
puts方式
puts "123","456"
自动换行输出结果:
123
456
-
print方式
print "123","456"
输出结果不换行:
123456
-
p方式
p "123","456"
输出结果自动换行:
"123"
"456"
从上面可以看出p的输出方法和上面两个不一样,要主要输入结果值
8.打印数据类型的方法
t = "123"
puts t.class
输出结果是
string
参考文章在这里:Ruby数据类型