2-ruby 基本数据类型

2-ruby 基本数据类型

ruby 基本数据类型

核心概念:Ruby中万物皆对象,没有真正的基本数据类型,所有值都是类的实例对象

分类:数字、文本、范围、符号、布尔值和nil,还有两种重要的数据结构------Array和Hash

下面进入 irb 交互模式来逐个演示。

数值类型(Number)

1、整型(Integer)

在交互模式,首先输出数字 1,如下:

首先我们要知道数字 1 也是实例对象,那么对象则应该会有相关方法,所以我们可以通过 obj.methods 来查看 数字 1 有什么方法。

输入:

bash 复制代码
1.methods

可以看到数字1也有大量的方法。

另外还可以使用 to_s 方法,将数字1转为字符串1,如下:

bash 复制代码
irb(main):005:0> 1.to_s
=> "1"
irb(main):006:0>

查看数字 1 的 实例类型,如下:

ruby 复制代码
irb(main):006:0> 1.class
=> Integer
irb(main):007:0>

那么再查看小数 1.2 的实例类型,如下:

ruby 复制代码
irb(main):007:0> 1.2.class
=> Float
irb(main):008:0>

计算 0.4 - 0.3 发现小数位 0.10000000000000003,这是因为精度的问题:

bash 复制代码
irb(main):001:0> 0.4 - 0.3
=> 0.10000000000000003
irb(main):002:0>
小结:
  • 对象本质:所有数字都是Numeric类的实例,整数是Integer的实例

  • 示例

    • 1是Integer类的实例对象

    • 1.2是Float类的实例对象

  • 对象的方法

    • 方法查看:可用.methods查看对象所有方法,如1.methods
    • 类型转换:to_s方法将数字转为字符串,如1.to_s → "1"
    • 浮点精度问题:0.4 - 0.3结果为0.10000000000000003,这是二进制浮点运算的精度问题
2. 文本

在交互模型,输入如下:

bash 复制代码
irb(main):002:0> 'test1'
=> "test1"
irb(main):003:0> "test2"
=> "test2"
irb(main):004:0> "test2".class
=> String
irb(main):005:0>
  • 文本的输入可以使用单双引号,并且性能上无区别
  • 文本的类是String类

文本的插值操作,语法:在双引号字符串中使用#{表达式}插入值

bash 复制代码
# 示例:a=1; b=2; "sum = #{a+b}"
irb(main):007:0> a=1; b=2; "sum = #{a+b}"
=> "sum = 3"
irb(main):008:0>

文本字符串相加示例:

  • 拼接操作:使用+连接字符串
bash 复制代码
# 示例 "hello" + " " + "world" → "hello world"
irb(main):011:0> "hello" + " " + "world"
=> "hello world"
irb(main):012:0>
  • 乘法操作:字符串可乘以数字
bash 复制代码
# 示例:"hello"*5 → "hellohellohellohellohello"
irb(main):012:0> "hello" * 5
=> "hellohellohellohellohello"
irb(main):013:0>
小结:
  • 字符串本质:也是对象,属于String类
  • 引号区别:单双引号在性能上无实质区别

1)插值操作

  • 语法:在双引号字符串中使用#{表达式}插入值
  • 示例:a=1; b=2; "sum = #{a+b}" → "sum = 3"

2)字符串相加

  • 拼接操作:使用+连接字符串,如 "hello" + " " + "world" → "hello world"
  • 乘法操作:字符串可乘以数字,如"hello"*5 → "hellohellohellohellohello"
3. 范围

输入包含边界的范围:

bash 复制代码
# 示例:包含边界:1..2(1≤x≤2)
irb(main):019:0> 1..2
=> 1..2
irb(main):020:0>

输入不包含上界的范围:

bash 复制代码
# 示例:不包含上界:1...3(1≤x<3)
irb(main):020:0> 1...3
=> 1...3
小结:
  • 表示方法:

    • 包含边界:1...2(1≤x≤2)
    • 不包含上界:1...3(1≤x<3)
4. 特殊运算符

使用 [] 修改字符串指定位置的字符,如下:

bash 复制代码
# 示例:a="hello"; a[1]='a'; a → "hallo"
irb(main):023:0> a="hello"; a[1]='a';
=> "a"
irb(main):024:0> a
=> "hallo"
irb(main):025:0>
小结:
  • 特殊运算符:如[]=可修改字符串指定位置字符
  • 示例:a="hello"; a[1]='a'; a → "hallo"
5. True、False和Nil

使用判断方法,判断 True or False,如下:

bash 复制代码
irb(main):026:0> 2 == 2
=> true
irb(main):027:0> 3 == 1
=> false
irb(main):028:0> true.class
=> TrueClass
irb(main):029:0> false.class
=> FalseClass
irb(main):030:0> nil.class
=> NilClass
irb(main):031:0>
  • 通过判断可以获取 True、False,并且得知它们相应的类

那么空字符串是否就是 nil 呢?

bash 复制代码
irb(main):032:0> "".nil?
=> false
irb(main):033:0> "hello".nil?
=> false
irb(main):034:0> "".empty?
=> true
irb(main):035:0> "".length
=> 0
irb(main):036:0>
  • 空字符串"" 并不是 nil,只是长度为0的字符串
  • 判断空字符串可以用 empty 方法
小结:

类来源:

  • true来自TrueClass

  • false来自FalseClass

  • nil来自NilClass

1)方法

  • 判断方法:可用==比较,如2==2→true,3==1→false
  • nil判断:"hello".nil?→false,空字符串不是nil

2)空字符串判断方法

  • 正确方法:使用empty?判断空字符串,如"".empty?→true
  • 注意:空字符串("")是存在的对象,只是内容长度为0