前言

上一节我们介绍了常量以及变量的用法,这一节我们开始来介绍Ruby中的一些基本类型。

数值类型(Fixnum、Bignum、Float)

  Ruby的数值类型包括整数和浮点数。整数包括Fixnum和Bignum两种类型,其中Fixnum可以容纳比一个物理字长少一位的整数。当一个整数超过Fixnum范围时,它会自动转换成Bignum类型,而Bignum类型的范围只能被物理内存所限制。

  如果对一个Bignum类型的整数进行算术计算,最后的结果使得它可以用一个Fixnum保存,那么结果就会一个Fixnum对象返回。

下面我们来看看这段代码:

class Test
# 定义一个名为a的变量,值为2的30次方减1
a = 1073741823
puts a.class
# 定义一个名为b的变量值为2的30次方
b = 1073741824
puts b.class
end

结果输出:

Fixnum
Bignum

(1)通常来说,定义一个变量的值为大于或等于2的30次方的整数时,系统自动将其设为Bignum类型;如果小于该值,则设置为Fixnum类型。

(2)整数前面可以带一个可选的符号标记(用以指定是正数还是负数)、一个可选的进制标记符(0代表十进制,0x代表十六进制,0b代表二进制),然后跟一串相应进制的数字串。

(3)若在数值中使用下划线,则数值中的下划线将被忽略。

(4)注意:Ruby里的基本数据类型也就是一个对象,如在JS中,我们获取一个数值的绝对值用的Math.abs(5),而在Ruby中5就是一个对象,则其取绝对值,则是5.abs(),由此可以看出Ruby才是真正的面向对象,一切皆对象。

所有整数实际上是Fixnum或者Bignum类的实例,因此完全可以执行这两个类的方法,比如迭代器,如times、upto、downto、step,以此来取代传统的for循环。如:

class Test
# 迭代输出三次
3.times{print "X "}
puts "\n"
# 从1迭代到5
1.upto(5){ |i| print i," "}
puts "\n"
end

(5)通过在ASCII字符串前添加“?”来获取它对应的整数值,注意因为问号“?”后面跟的是ASCII字符而不是字符串,因此不需要使用引号,也不能有多个字符。

class Test
puts ?a
end

当你运行时,你会惊喜发现居然输出a,后得知原来这是在Ruby1.8是这么用的,之后是这么用的

class Test
puts "a".ord
# 或者
puts ?a.getbyte(0)
end

(5)通过字符串前加英文问号(?),然后取getbyte(0)即可或者通过给ASCII字符串加上双引号然后调用ord方法即可。

(6)当使用科学计数法来表示浮点数时,如果e的前面部分是一个整数,则要么完全忽略小数点,要么在小数点后增加0。如下所示

class Test
puts 5e2
puts 5.0e2
end

若是  puts 5.e2 肯定会报错,我们前面讲到数值也是对象,此时会将5作为对象,然后调用e2方法,但该方法根本不存在,则出错。

字符串 (String)

在Ruby语言中,字符串是String类的实例,因此任意的字符串变量、常量都可调用String类的实例方法,String类可能是Ruby中最大的内建类,它有超过75个标准方法,足以说明其是一个非常重要的类。其实在Ruby在单引号的字符串和双引号的字符串本质上是相同的,只不过用双引号会免去许多不必要的操作所带来的麻烦。

class Test
a = "Hello World"
b = 'Hello World'
puts a == b
end

通过打印出true知,都是一样的。

字符串的%表示法

若我们希望一个字符串是有多行字符串组成,则可以使用"%"表示法。“%”表示法一共有三种方法:

(1)%/stuff/

(2)%Q/stuff/

(3)%q/stuff/

上述(1)和(2)用法一样,斜杠代表分隔符也可以为括号。

下面以%Q和%q来进行演示:

class Test
# 定义一个全局变量
$global = "Ruby"
# 使用%Q/stuff/来生成多行字符串
a = %Q/
Hello,Ruby
Ruby is Simple Language
Ruby On Rais #{$global}/
# 使用%q/stuff/来生成多行字符串
b = %q{
Hello,Ruby
Ruby is Simple Language
Ruby On Rais #{$global}}
puts a
puts b
end

#{$global} 为插值表达式利用定义的全局变量进行替换,在上述中当使用花括号时,此时插值表达式将会失效。

多行字符串的字面值

Ruby也提供了一种多行字符串的表现形式,这种语法也被成为Here Document。Here Document的最常用语法格式如下:

class Test
<<标识符
stuff
标识符
end

下面我们来举个例子:

$global = 123
# 使用Here Document定义了一个字符串
puts <<Here
这是一个多行文本内容
使用Here文档语法
Sum = #{$global + 1}
Here

结果打印出:

    这是一个多行文本内容
使用Here文档语法
Sum = 124

一般我们建议将结尾的<<进行顶格书写。

数组 (Array)

Ruby中的数组可以使用一系列在方括号中用逗号分隔的对象引用来定义,方括号的最后一个逗号会被忽略。如下所示:

a = [4, 5 , "Hello World"]

注意:Ruby语言里数组的长度是可变的,当我们指定中间某个数组元素的值后,会导致该元素前面没有指定值的数组元素的值都是nil。

Ruby里的数组是Array类的实例,我们可以通过创建Array类的实例来创建数组,如下所示:

my_array = Array.new

数组的%表示方法

Ruby语言还可以把一个包含多个空格的字符串转换成数组。Ruby会把空格当成数组分隔符,每个空格分隔的子串都会被当成一个数组元素。如果我们需要将多个空格的字符串转换成数组,则需要使用"%w{...}或者%W{...}"表示法,这两种方法功能大致相同,但是"%W{...}"会进行更多额外的替换。

$global = 6
my_array = %w(Hellow Ruby On Rails,
Ruby\ on\ Rails Is Funny! #{$global})
my_array2 = %W(Hellow Ruby On Rails,
Ruby\ on\ Rails Is Funny! #{$global})
p my_array
p my_array2

结果打印:

["Hellow", "Ruby", "On", "Rails,", "Ruby on Rails", "Is", "Funny!", "\#{$global}"]
["Hellow", "Ruby", "On", "Rails,", "Ruby on Rails", "Is", "Funny!", ""]

数组常用方法

(1)截取数组的字数组

# 定义一个Range对象
my_range = 1..9
# 将Range对象转换成数组对象
my_array = my_range.to_a
p my_array # 从数组的第3个元素开始截取,共截取2个元素
p my_array[2, 2] # 从数组的第3个元素开始截取,截取到第5个元素,包含第5个元素
p my_array[2..4] # 从数组的第3个元素开始截取,截取到第5个元素,不包含第5个元素
p my_array[2...4]

输出:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[3, 4]
[3, 4, 5]
[3, 4]

(2)为多个数组赋值

# 定义一个Range对象
my_range = 1..9
# 将Range对象转换成数组对象
my_array = my_range.to_a # 从第3个元素开始,一共将2个元素替换成一个字符串元素
my_array[2, 2] = "Ruby"
p my_array # 从第3个元素开始,一共将1个元素替换成2个元素
my_array[2, 1] = ["Hello", "World"]
p my_array # 将第3个元素、第4个元素替换成7、8、9三个元素
my_array[2..3] = [7, 8, 9]
p my_array

打印出:

[1, 2, "Ruby", 5, 6, 7, 8, 9]
[1, 2, "Hello", "World", 5, 6, 7, 8, 9]
[1, 2, 7, 8, 9, 5, 6, 7, 8, 9]

范围 (Range)

范围是多个枚举的一种表现形式,创建该枚举形式的范围有两种形式。

(1)值1..值2:定义一个值1到值2的范围,包括值1和值2,也包括值1和值2中间的值。

(2)值1...值2:定义一个值1到值2的范围,包括值1但不包括值2,也包括值1和值2中间的值。

常用方法

(1)to_a():将该范围转换成一个数组。

(2)include()?(Targetvalue)===(tagetValue):判断该范围是否包含了tagetValue。

(3)min()/begin()/first():求该范围的最小值(第一个值)。

(4)max()/end()/last():求该范围的 最大值(最后一个值)。

以下为常用的迭代器方法:

(1)reject:将该范围转换成一个数组,并剔除掉满足条件的元素。

class Test
# 使用...定义范围,则该范围不包括终点
a = 2...10
# 将范围转换成数组,且排除不满足条件的元素
print a.reject {|i| i < 5}
puts "\n"
end

打印出: [5, 6, 7, 8, 9]

(2)select:将该范围转换成一个数组,只选择满足条件的元素。

class Test
# 使用...定义范围,则该范围不包括终点
a = 2...10
# 将范围转换成数组,且只选择满足后面条件的元素
print a.select {|i| i < 5}
puts "\n"
end

打印出: [2, 3, 4]

(3)each:迭代范围里的每个元素。

class Test
# 使用...定义范围,则该范围不包括终点
a = 2...10
# 使用each迭代输出范围里的每个元素
a.each do |ele|
puts "当前元素时:" + ele.to_s
end
end

打印出:

当前元素时:2
当前元素时:3
当前元素时:4
当前元素时:5
当前元素时:6
当前元素时:7
当前元素时:8
当前元素时:9

结语

这一节我们细讲并学完基本数据类型,下一节我们将进入表达式和语句。

Ruby之基本数据类型(三)的更多相关文章

  1. 【Ruby on Rails 学习三】Ruby 基本数据类型(类、类的实例、对象)

    数字.文本.范围.符合.True.False.Nil 1为什么是一个类的对象,使用methods方法可以查看一个对象的所有函数(方法) $ irb irb(main)::> => irb( ...

  2. Ruby on Rails Tutorial 第四章 Rails背后的Ruby 之 其他数据类型(二)

    1.方法 定义如下所示: def string_message(str='') if str.empty? "It's an empty string!" else "T ...

  3. python 数据类型三 (字典)

    一.字典的介绍 字典(dict)是python中唯一的一个映射类型,它是以{}括起来的键值对组成,在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存 ...

  4. python数据类型三(字典)

    一.字典的介绍 字典(dict)是python中唯一的一个映射类型,它是以{}括起来的键值对组成,在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将key-value保存 ...

  5. 数据类型(三) + 流程控制(一) day05

    目录 昨日回顾 (三) 花式赋值 链式赋值 交叉赋值 (四) 列表list (五) 字典dict (六) 布尔值 (七) 解压缩 (八) python与用户交互的方式 (九) 三种格式化输出的方式 f ...

  6. python基础(8):基本数据类型三(dict)、is和==、编码和解码

    1. 字典 1.1 字典的介绍 字典(dict)是python中唯一的一个映射数据类型,它是以{}括起来的键值对组成.在dict中key是唯一的,在保存的时候,根据key来计算出一个内存地址,然后将k ...

  7. python3 基础二——基本的数据类型三

    一.字符串str 1.创建字符串,为变量分配一个值 word='字符串' sentence="字符串\n" #python中单引号和双引号使用完全相同 paragraph=&quo ...

  8. ruby -- 进阶学习(三)Strong Parameters在rail3.0和4.0中的区别

    今天coding的时候遇到一个未知的类型,于是用puts logo_params.class查了下数据类型,然后google了一下发现是 Strong Parameter Strong paramet ...

  9. Ruby自学笔记(三)— 方法Method

    Ruby做为面向对象语言,肯定要对对象进行相关的操作,这时候就涉及到方法了. 调用方法 - 对象.方法名(实参1,实参2,...,实参n) 方法的分类: 1. 实例方法:顾名思义,就是由实例来调用的方 ...

随机推荐

  1. C# uploadify 上传 -220 IO Error 问题

    1. 前端: uploadify 上文件大小限制配置. 2. 后端: web.config 配置 <?xml version="1.0"?> <configura ...

  2. 【转】Microsoft .NET Framework 3.5 sp1 安装速度慢,快速离线安装的方法

    1.到官网上下载3.5SP1的完整安装包.2.下载完成后,命令行下运行dotnetfx35.exe/x,解压到一个目录(如D:"),此时会生成一个D:"wcu目录3.进入解压目录下 ...

  3. jpeg相关知识

    一.jpeg介绍 JPEG 是 Joint Photographic Exports Group 的英文缩写,中文称之为联合图像专家小组.该小组隶属于 ISO 国际标准化组织,主要负责定制静态数字图像 ...

  4. GitHub托管项目

    1.进入Repositories->点击 new repositories; 2.输入Repository name 直接创建项目: 3.记录你的项目地址,如:https://github.co ...

  5. 多线程、委托、Invoke解决winform界面卡死的问题,并带开关

    一.知识点介绍 1,更新控件的内容,应该调用控件的Invoke方法. Invoke指: 在拥有控件的基础窗口句柄的线程上,用指定的参数列表执行指定委托.该方法接收一个委托类型和委托的参数,因此需要定义 ...

  6. mac安装虚拟机

    1. 安装VirtualBox 2. 新建,按照步骤一步步选择 3.安装系统镜像 xp_sp3_74070.iso CN_WIN7_SP1_X64_33in1_V1.2.iso 设置磁盘分区等 4.V ...

  7. linux shell中不显示路径了,显示为-bash-4.1#的两种解决办法

    出现这个问题的原因是因为没有配置.bash_profile的问题,或者是我们不小心清空或删除了.bash_profile文件. 办法一:修改 ~/.bash_profile文件 步骤如下: vim ~ ...

  8. Mac环境下Octopress个人博客搭建

    一直想弄一个漂亮一点的个人博客,之前一直用的博客园,对主页的能自定义内容实在不满意,终于下定决定,找到了Octopress这个适合我的解决方案,以下过程都是自己一步一步记录下来的,希望对大家有帮助. ...

  9. c#中abstract与virtua、overridel的用法

    1.abstract 抽象方法 ,virtual 虚方法 ,override 重载函数 父类A.m() 子类B.m()   abstract的方法父类可以不实现,让子类去重写(重写=overwrite ...

  10. go中安装Beego不成功笔记

    在go.Git等等之类的相关软件安装好了之后,便可以安装Beego. 1.开始的时候是由于网络限制,不能访问Github,这个还好说找VPNFQ... 2.之后的问题,在git Bash中输入go g ...