`
wlo_o
  • 浏览: 50501 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

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

    博客分类:
  • ruby
阅读更多

Ruby 的标准类型包括数字(Numeric)、字符串(String)、区间(Range)以及正则表达式(Regexp)。这似乎和我们以及熟悉的标准类型概念有点不同,区间还好说,正则怎么成了标准类型了? [rolleyes] 

数字

Ruby 的数字包括整数(Integer)和浮点数(Float),这些类型都直接或间接继承自 Numeric。Ruby 的整数并没有长度限制,一定范围内的整数是 Fixnum 对象,当超出该范围则会自动转换成 Bignum。

Fixnum < Integer < Numeric
Bignum < Integer < Numeric
Float < Numeric

i = 123
puts i.class
i = 123 ** 123
puts i.class
i = 1
puts i.class

输出:
Fixnum
Bignum
Fixnum

浮点数并没有这么复杂,所有的浮点数类型都是 Float,无论它有多长。
f = 123.45
puts f.class
f = 1235743954325432875984372594372957439254.455432543254325432545254325432
puts f.class

输出:
Float
Float

和所有的语言一样,我们可以通过前导符号标定数字的格式。
  • 0 : 八进制。0377
  • 0d : 十进制。
  • 0x : 十六进制。 0xaabb
  • 0b : 二进制。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.include?(2)
puts r === 2 # 和 include? 作用相同

正则表达式

Ruby 在语言层面提供了正则表达式的支持,我们可以用下面三种方法创建 Regexp 对象。
a = Regexp.new('[\d]+')

b = /[\d]+/
puts b.class

c = %r{[\d]+}
puts c.class

输出:
Regexp
Regexp

我们可以用操作符 "=~" 来完成匹配(Match)操作。(操作副 "!~" 和此作用相反,是否定匹配)
s = "Number: 100234, ..."

puts s =~ /[\d]+/
puts $& # 返回匹配的字符串 "100234"
puts $` # 返回匹配之前的字符串 "Number: "
puts $' # 返回匹配之后的字符串 ", ..."

"$~" 返回 MatchData 对象,其中包含匹配长度、偏移量等所有信息,类似 C# Match。除此之外,我们同样可以操作组(Group)。
s = "Number: 100234,234 ..."

puts s =~ /([\d]+),([\d]+)/
puts $& # 返回匹配的字符串
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]+/) # 返回所有匹配数组

分享到:
评论

相关推荐

    学习 Ruby 的笔记以及 Demo.zip

    本资源“学习 Ruby 的笔记以及 Demo.zip”显然包含了关于Ruby编程的学习资料和一些实际示例代码,旨在帮助初学者理解并掌握Ruby的基础及进阶特性。 首先,让我们深入了解一下Ruby的核心特性: 1. 面向对象:Ruby是...

    个人ruby学习笔记

    从给定的文件信息中,我们可以提炼出一系列关于Ruby编程语言的重要知识点,涵盖基础语法、变量类型、数值操作、条件语句、循环结构以及字符串处理等核心领域。 ### Ruby基础语法 #### 注释 Ruby提供了两种注释方式...

    ruby笔记2ruby笔记2ruby笔记2

    "ruby笔记2ruby笔记2ruby笔记2"可能是指一系列关于Ruby学习的笔记,这些笔记可能涵盖了Ruby的基础概念、核心特性以及进阶话题。在Ruby的学习过程中,理解和掌握以下几个关键知识点至关重要: 1. **面向对象编程...

    ruby语言入门教程-自学笔记

    - **丰富的标准库**:Ruby拥有大量的内置库和第三方库,极大地提高了开发效率。 - **强大的元编程能力**:Ruby支持高级的元编程特性,使得开发者能够轻松地扩展和定制语言本身的功能。 - **面向对象**:Ruby是一门...

    HTML5学习笔记.pdf

    HTML5 学习笔记 HTML5 是 W3C 与 WHATWG 合作的结果,WHATWG 指 Web Hypertext Application Technology Working Group。WHATWG 致力于 web 表单和应用程序,而 W3C 专注于 XHTML 2.0。 HTML5 中的新特性包括: * ...

    GDAL学习笔记.doc

    由于GDAL是跨平台的,因此可以在C/C++、Python、Ruby、VB、Java和C#等多种编程语言环境下使用,并保持一致的功能。 对于Python开发者而言,GDAL的Python接口与Numeric库的紧密结合,使得数据处理变得更加高效和直观...

    Ruby知识点笔记

    Ruby是一种面向对象的脚本语言,其语法简洁且灵活。在Ruby中,标识名的命名规则至关重要,因为它们区分了不同类型的变量和方法。...学习并熟练掌握这些基础概念,将有助于深入理解和运用Ruby语言。

    ruby笔记3ruby笔记3ruby笔记3

    Ruby中的变量分为四种类型:局部变量(以小写字母或下划线开头)、实例变量(以`@`开头)、类变量(以`@@`开头)和全局变量(以`$`开头)。了解它们的用法和作用域是学习Ruby的基础。 接着,Ruby的核心在于它的面向...

    Ruby数组(Array)学习笔记

    Ruby中的数组是动态数组,存储的数据不用限定类型,数组的长度是根据存储需要动态扩展,所以,在进行数据定义的时候,只用用最简单的方式new一个Array对象就可以了,可以使用以下几种方式: 代码如下: arr1=[] #最...

    Python 学习笔记 第三版1

    《Python 学习笔记 第三版1》是一本面向...总之,《Python 学习笔记 第三版1》是一本适合有一定Python基础的读者进阶阅读的书籍,内容丰富,覆盖了Python 3.6的核心知识和标准库的使用,有助于读者提升Python编程技能。

    JAVA学习笔记详解

    ### JAVA学习笔记详解 #### 第一讲 Java语言概述 ##### 课前思考: 1. **新的编程语言是否需要借鉴以前的编程语言?** - 新的编程语言在设计时往往会借鉴已有语言的成功经验和失败教训。Java 作为一种相对较新的...

    jvm中篇笔记.md

    ### JVM中篇笔记知识点 #### 一、Class 文件结构 ##### 1. 概述 - **字节码文件的跨平台性** - Java 的跨平台性体现在 "Write Once, Run Anywhere" (WORA),即一次编写,到处运行。Java 语言编写的源代码在编译...

    XMPP学习入门笔记

    本篇学习笔记汇总了XMPP的基本概念以及多种编程语言下的客户端库介绍,旨在帮助读者快速了解并上手XMPP技术。XMPP作为一种强大的即时通讯协议,不仅具备高度的可扩展性,还支持多种编程语言。这使得开发者可以根据...

    Ruby 语言教程从小白到入门

    总的来说,通过这个“Ruby 语言教程从小白到入门”的学习,你将能够掌握Ruby的基础知识,包括语法、面向对象编程、异常处理、标准库的使用等。随着对Ruby理解的深入,你将能够编写出更高效、更优雅的代码,进一步...

    Ruby语法笔记

    这篇笔记将深入探讨Ruby的一些基础语法,包括变量、控制结构、类和对象、字符串操作以及循环。 首先,Ruby中的变量分为四种类型:全局变量(以`$`开头)、类变量(以`@@`开头)、方法变量(以`@`开头)和局部变量...

    ruby-practice:回购我学习Ruby的书籍

    2. **教程或笔记**:可能是作者整理的学习资料,涵盖了Ruby的基础知识和高级特性,帮助你系统地学习。 3. **测试文件**:通常以`.rb`后缀结尾,用于运行代码并验证其正确性。Ruby的测试驱动开发(TDD)文化非常流行...

    Groovy学习笔记

    ### Groovy学习笔记知识点梳理 #### 一、Groovy简介 - **概念**:Groovy是一种灵活的脚本语言,其设计初衷是为了更好地服务于Java开发者。它具备许多现代动态语言的特点,比如Python和Ruby,同时又能够无缝地与Java...

    GDAL库学习笔记(一到七)

    GDAL采用X/MIT风格的开放源代码许可证,这意味着它可以在多种操作系统上运行,如Windows、Linux和macOS,并且支持多种编程语言,如C/C++、Python、Ruby、VB、Java和C#。 GDAL的强大之处在于它支持众多的数据格式,...

    GDAL学习笔记------包括安装,gdal库

    GDAL的独特之处在于它的跨平台性,可以在C/C++、Python、Ruby、VB、Java和C#等多种编程语言下使用,且功能一致。对于Python用户,GDAL与Numeric库的集成使得数据处理变得更加便捷,可以利用矩阵运算轻松处理图像数据...

    swig的学习以及国密的python封装.zip_python 国密_swig的学习以及国密的python封装_国密

    压缩包内的“swig的学习以及国密的python封装.txt”文件很可能是详细教程或者笔记,涵盖了如何使用SWIG将国密算法转化为Python可用的步骤和示例。 以下是详细的知识点: 1. **SWIG介绍**:SWIG是一个开源工具,...

Global site tag (gtag.js) - Google Analytics