任何一门编程语言都有自己的基本的数据类型,Ruby是一种弱类型的编程语言,变量不需要提前定义,也不需要指定变量的类型,解释器会自动的根据变量存储的内容推断变量的类型。
1. 常量
在Ruby中常量的使用直接定义一个变量,并且指定值就可以了。但是根据其他编程语言的编程习惯,常量一般用全部大写的字母表示:
#encoding:gbk
FANS = 10;
puts "家里一共有" + FANS.to_s + "个电风扇";
NAME = "北京理工大学";
puts "学校名字是:" + NAME;
这里的输出结果是:
watkins@watkins:~/temp/workspace/ruby$ ruby constant.rb
家里一共有10个电风扇
学校名字是:北京理工大学
watkins@watkins:~/temp/workspace/ruby$
在上面的程序中,FANS常量被当成整型,输出的时候应该将其转换位字符串
2. 变量
在Ruby中变量一般分为局部变量和全局变量,和其他的语言一样,在局部变量的定义外部不可以调用这个局部变量。
2.1 局部变量
局部变量一般采用小写字母或者下划线开头。
局部变量离开了作用域,局部变量就会消失
#encoding:gbk
_info = "local variable";
puts _info;
在Ruby中方法的定义如下:
#encoding:gbk
_info = "local variable";
puts _info;
def show
localInfo = "local in function";
puts localInfo;
end
show;
在Ruby中,方法是通过小写字母开头或者下划线开头的,方法的调用过程中,如果没有参数,可以省略函数中的小括号,这个可能其他语言的开发者不是很熟悉这种用法而且本人觉得这种用法不是很爽。。。。
2.2 全局变量
全局变量以$符号开头
#encoding:gbk
_info = "local variable";
$Name = "Beijing Institute of Technology";
puts _info;
def show
localInfo = "local in function";
puts localInfo;
puts $Name;
end
show;
上面的输出结果:
watkins@watkins:~/temp/workspace/ruby$ ruby temp.rb
local variable
local in function
Beijing Institute of Technology
watkins@watkins:~/temp/workspace/ruby$
2.3 系统定义的全局变量
Ruby 中定义了一些系统自带的全局变量:
$! 最近一次的错误信息
$@ 错误产生的位置
$_ gets最近读的字符串
$. 解释器最近读的行数
$& 最近一次与正则表达式匹配的字符串
$~ 作为字表达式组的最近一次匹配
$n 最近匹配的第几个子表达式
$= 是否区分大小写的标志
$/ 输入记录分隔符
$\ 输出记录分隔符
$0 Ruby脚本文件名
$* 命令行参数
$$ 解释器进程ID
$? 最近一次执行的子进程推出状态
#encoding:gbk
_info = "local variable";
$Name = "Beijing Institute of Technology";
puts _info;
def show
localInfo = "local in function";
puts localInfo;
puts $Name;
end
show;
puts $?
3. 数据类型
3.1 数值型
Ruby语言提供了丰富的基本数据类型,比较常用的数据类型有:数值型,范围,符号类型。
数值型分为整型和浮点型,整型又分为Fixnum和Bignum两种类型。
#encoding:gbk
i = 2*2*2*2*2*2*2;
puts i.class;
使用.class获取当前变量的数据类型。
输出的结果:
watkins@watkins:~/temp/workspace/ruby$ ruby number.rb
Fixnum
watkins@watkins:~/temp/workspace/ruby$
#encoding:gbk
i = 2*2*2*2*2*2*2;
puts i.class;
a = 2.1;
puts a.class;
watkins@watkins:~/temp/workspace/ruby$ ruby number.rb
Fixnum
Float
watkins@watkins:~/temp/workspace/ruby$
3.2 范围类型
在 Ruby中有范围的类型
有两种范围类型:
a..b
a...b
#encoding:gbk
i = 2*2*2*2*2*2*2;
puts i.class;
a = 2.1;
puts a.class;
age = 1..5;
puts age;
puts age === 3;
puts age === 3;
height = 1...5;
puts height;
puts height === 5;
输出的结果:
watkins@watkins:~/temp/workspace/ruby$ ruby number.rb
Fixnum
Float
1..5
true
true
1...5
false
watkins@watkins:~/temp/workspace/ruby$
期中,
a..b的含义是a到b的值的范围,包含a,和b
a...b的含义是a到b的值的范围,但是包含a,不包含b
这里===(三个等号)的意思是判断是否包含一个元素
范围的类型,包含了一些基本的对这个范围进行操作的函数,有:
to_a 将范围转换为一个数组
.include?100 是否包含100这个元素
min()
begin()
first()
max()
end()
last()
范围对象还可一使用3个常用的迭代其方法:
regect {} 删除满足条件的元素
select {} 选择满足条件的元素
each{} 迭代每一个元素
#encoding:gbk
i = 2*2*2*2*2*2*2;
puts i.class;
a = 2.1;
puts a.class;
age = 1..5;
puts age;
puts age === 3;
puts age === 3;
height = 1...5;
puts height;
puts height === 5;
puts "*******************************";
count = 10..20;
print count.reject{|i| i<15};
puts "\n";
输出的结果为:
watkins@watkins:~/temp/workspace/ruby$ ruby number.rb
Fixnum
Float
1..5
true
true
1...5
false
*******************************
[15, 16, 17, 18, 19, 20]
watkins@watkins:~/temp/workspace/ruby$
#encoding:gbk
i = 2*2*2*2*2*2*2;
puts i.class;
a = 2.1;
puts a.class;
age = 1..5;
puts age;
puts age === 3;
puts age === 3;
height = 1...5;
puts height;
puts height === 5;
puts "*******************************";
count = 10..20;
print count.reject{|i| i<15};
puts "\n";
print count.select{|i| i<15};
puts "\n";
count.each do |i|
puts i.to_s;
end;
输出结果为:
watkins@watkins:~/temp/workspace/ruby$ ruby number.rb
Fixnum
Float
1..5
true
true
1...5
false
*******************************
[15, 16, 17, 18, 19, 20]
[10, 11, 12, 13, 14]
10
11
12
13
14
15
16
17
18
19
20
watkins@watkins:~/temp/workspace/ruby$
3.3 符号变量
数据类型是一个对象,符号也一样是一个对象。
符号对象是一个字符串、方法、类、或者一个标识符的内部表示,创建符号变量就是在对象前面加上一个冒号就可以了。
#encoding:gbk
info = "Beijing Institute of Technology";
h = :info;
puts info;
puts h;
puts h==:info;
puts h==:"info";
puts "*******************************";
a = :"test the symbol";
b = "test the symbol";
puts a==b;
puts a==b.to_sym;
puts a.to_s==b;
上面代码的输出结果:
watkins@watkins:~/temp/workspace/ruby$ ruby symbol.rb
Beijing Institute of Technology
info
true
true
*******************************
false
true
true
watkins@watkins:~/temp/workspace/ruby$
请注意,符号变量和字符串并不相等。
可以使用:创建符号变量,还可以使用%s{dcy}创建符号变量。
dcy = "abcd";
ly = :dcy;
d = %s{dcy};
puts ly==d;
输出结果为true, 通过%s创建符号变量。