`

ruby 标准类型总结

阅读更多

一、数字

Ruby支持整数和浮点数,整数可以是任意长度

一定范围内的整数以二进制存放,它们属于fixnum类型,当超出这个范围时则自动转换为bignum类型

表达方式:符号+一串字符,数字串中的下划线会被忽略,(前缀包括:0表示八进制, 0x表示十六进制, 0b表示二进制)123_456_789_123_345_789 # Bignum

0xaabb # 十六进制

也可以通过在前面加上问号来得到ASCII码字符对应的整数值和转义序列的值

?a # 普通字符

?\n # 换行符 (0x0a)

?\C-a # CTRL+a (0x01)

?\M-a # ALT+a

?\M-\C-a # CTRL+ALT+a

?\C-? # 删除键

一个带小数点的数字字面值被转换成Float对象

所有的数字都是对象,不存在相应的函数而是方法

exp:

数字的绝对值是aNumber.abs而不是abs(aNumber)

整数有用的迭代器

3.times { print "X " } => X X X 1.upto(5) { |i| print i, " " } =>1 2 3 4 5 99.downto(95) { |i| print i, " " }=>99 98 97 96 95 50.step(80, 5) { |i| print i, " " }=>50 55 60 65 70 75 80

二、字符串

Ruby的字符串是8位字节的简单序列,字符串是String类的对象

注意转换机制(注意单引号与双引号的区别),如:

单引号中两个相连的反斜线被替换成一个反斜线,,一个反斜线后跟一个单引号被替换成一个单引号

'escape using "\\"' >> 转义为"\" 'That\'s right' >> That's right

双引号支持多义的转义

"\n"

#{expr}序列来替代任何的Ruby表达式的值 ,(全局变量、类变量或者实例变量,那么可以省略大括号)

"Seconds/day: #{24*60*60}" >> Seconds/day: 86400 "#{'Ho! '*3}Merry Christmas" >> Ho! Ho! Ho! Merry Christmas "This is line #$." >> This is line 3

here document来创建一个字符串,end_of_string 为结束符号

aString = <<END_OF_STRING The body of the string is the input lines up to one ending with the same text that followed the '<<' END_OF_STRING

%q和%Q分别把字符串分隔成单引号和双引号字符串(即%q与%Q后面的符号具有',"的功能)

%q/general single-quoted string/ >> general single-quoted string

String 常用功能

String#split:把行分解成字段

String#chomp:去掉换行符

String#squeeze:剪除被重复输入的字符

String#scan:以指定想让块匹配的模式

exp:

/jazz/j00132.mp3 | 3:45 | Fats Waller | Ain't Misbehavin'

/jazz/j00319.mp3 | 2:58 | Louis Armstrong | Wonderful World

#文件格式如上,要进行分解

songs = SongList.new

songFile.each do |line|

file, length, name, title = line.chomp.split(/\s*\|\s*/)#先chomp,后再分解,/\s*表示任字符

name.squeeze!(" ")#替换空格

mins, secs = length.scan(/\d+/)#这里用scan匹配模式

songs.append Song.new(title, name, mins.to_i*60+secs.to_i)

end

三、区间

区间存在于任何地方,如:1到12月。ruby用区间实现了3个不同的特性:序列,条件,间隔。

"..":两个点号创建一个闭区间,"...":而三个点号创建一个右开区间(即右边界不取值)

exp:0..anArray.length-1 等同于 0...anArray.length

to_a 把区间转换成列表

exp: ('bar'..'bat').to_a >> ["bar", "bas", "bat"]

区间的共它的用法

digits = 0..9 

digits.include?(5) >> true 

digits.min >> 0 

digits.max >> 9 

digits.reject {|i| i < 5 } >> [5, 6, 7, 8, 9] 

digits.each do |digit| 

dial(digit) 

end

ruby能把基于自己定义的对象的区间,要求:这个对象必须能够响应succ方法来返回序列中的下一个对象,并且这个对象必须能够使用<=>运算符来被比较,即常规的比较运算符,

间隔测试

puts (1..10).include?(3.14)=> ture

puts (1..10) === 3.14 => ture

四、正则表达式

正则表达式是Regexp类型的对象,可以使用构造器显式地创建一个正则表达式,也可以使用字面值形式/pattern/和%r\pattern\来创建

用Regxp#match(aString)的形式或者匹配运算符=~(正匹配)和!~(负匹配)来匹配字符串了。匹配运算符在String和Regexp中都有定义,如果两个操作数都是字符串,则右边的那个要被转换成正则表达式

exp:

a = "Fats Waller" 

a =~ /a/ >> 1 

a =~ /z/ >> nil 

a =~ "ll" >> 7

上面返回的是匹配字符的位置,其它

$&接受被模式匹配到的字符串部分

$`接受匹配之前的字符串部分

$'接受之后的字符串。

exp:下面的方法后继都会用到

def showRE(a,re) 

if a =~ re 

"#{$`}<<#{$&}>>#{$'}" #返回前、中、后

else 

"no match" 

end 

end 

模式,任何一个表达式都包含一个模式,它用来把正则表达式和字任串匹配

模式中除了., |, (, ), [, {, +, \, ^, $, *,和?以外的字任都匹配它自己

如果要匹配这些特殊的字符就需要加上反斜线做前缀,分析上面例字

/\s*\|\s*/,在\s与|之前都加了/做前缀。

showRE('kangaroo', /angar/) >> k<<angar>>oo 

showRE('!@%&-_=+', /%&/) >> !@<<%&>>-_=+ 

showRE('yes | no', /\|/) >> yes <<|>> no 

\后跟一个字母或数字表示一个特定的结构如\s表示字符等。

锚点 一个正则表达式总是返回找到模式的第一个匹配,如何改变?

模式^和$分别用来匹配行首和行尾

序列\A匹配字符串开始的位置,\z和\Z匹配字符串结尾的位置

\b和\B分别匹配字边界和非字边界

showRE("this is\nthe time", /^the/) >> this is\n<<the>> time 

showRE("this is\nthe time", /is$/) >> this <<is>>\nthe time 

showRE("this is\nthe time", /\Athis/) >> <<this>> is\nthe time

 

五、字符类

这里的字符类不是面向对象的类,只表示这些这字符属于一个特殊的种类

字符类是用方括号扩起来的字符的集合:[characters]匹配方括号中的所有单字符。[aeiou]匹配元音,[,.:'!?]匹配标点符号等等

showRE('It costs $12.', /[aeiou]/) >> It c<<o>>sts $12.

在方括号中的序列c1-c2表示在c1-c2之间也包括c1和c2的所有字符

a = 'Gamma [Design Patterns-page 123]' 

showRE(a, /[]]/) >> Gamma [Design Patterns-page 123<<]>> 

showRE(a, /[B-F]/) >> Gamma [<<D>>esign Patterns-page 123] 

showRE(a, /[-]/) >> Gamma [Design Patterns<<->>page 123] 

showRE(a, /[0-9]/) >> Gamma [Design Patterns-page <<1>>23]

紧跟在开括号([)后的是字符^,这表示这个字符类的否定:[^a-z]匹配任何不是小写字母的字符。

字符类缩写

序列 形如 [ ... ] 含义

\d [0-9] Digit character

\D [^0-9] Nondigit

\s [\s\t\r\n\f] Whitespace character 匹配一个单空白符

\S [^\s\t\r\n\f] Nonwhitespace character

\w [A-Za-z0-9_] Word character

\W [^A-Za-z0-9_] Nonword character

重复

r * 匹配0个或多个r的出现

r + 匹配一个或多个r的出现

r ? 匹配0个或1个r的出现

r {m,n} 匹配最少m最多n个r的出现

r {m,} 匹配最少m个r的出现

 

重复结构有高优先权:即它们仅和模式中的直接正则表达式前驱捆绑

/ab+/匹配一个"a"后跟一个活着多个"b",而不是"ab"的序列

/a*/会匹配任何字符串:0个或者多个"a"的任意字符串。 

exp:

a = "The moon is made of cheese" 

showRE(a, /\w+/) >> <<The>> moon is made of cheese 

showRE(a, /\s.*\s/) >> The<< moon is made of >>cheese 

showRE(a, /\s.*?\s/) >> The<< moon >>is made of cheese 

showRE(a, /[aeiou]{2,99}/) >> The m<<oo>>n is made of cheese 

showRE(a, /mo?o/) >> The <<moo>>n is made of cheese

替换

"|"既匹配它前面的正则表达式或者匹配后面的

a = "red ball blue sky" 

showRE(a, /d|e/) >> r<<e>>d ball blue sky 

showRE(a, /al|lu/) >> red b<<al>>l blue sky 

showRE(a, /red ball|angry sky/) >> <<red ball>> blue sky

分组

圆括号把正则表达式分组,组中的内容被当作一个单独的正则表达式

showRE('banana', /(an)+/) >> b<<anan>>a 

# 匹配重复的字母 

showRE('He said "Hello"', /(\w)\1/) >> He said "He<<ll>>o" 

# 匹配重复的子字符串

showRE('Mississippi', /(\w+)\1/) >> M<<ississ>>ippi

基于模式的替换

你是否想过,大小写替换。

方法String#sub和String#gsub都在字符串中搜索匹配第一个参数的部分,然后用第二个参数来替换它们。String#sub只替换一次,而String#gsub替换所有找到的匹配。都返回一个包含了替换的新的字符串的拷贝。进化版本是String#sub!和 String#gsub!

a = "the quick brown fox" 

a.sub(/[aeiou]/, '*') >> "th* quick brown fox" 

a.gsub(/[aeiou]/, '*') >> "th* q**ck br*wn f*x" 

a.sub(/\s\S+/, '') >> "the brown fox" 

a.gsub(/\s\S+/, '') >> "the"

第二个参数可以是代码块

a = "the quick brown fox" 

a.sub (/^./) { $&.upcase } >> "The quick brown fox" 

a.gsub(/[aeiou]/) { $&.upcase } >> "thE qUIck brOwn fOx"

反斜线序列用在替换中

\& 后面的匹配

\+ 后面的匹配组

\` 匹配前面的字符串

\' 匹配后面的字符串

\\ 反斜线的字面值

面向对象的正则表达式

正则表达式的字面值创建Regexp类

re = /cat/ 

re.type >> Regexp

方法Regexp#match从字符串中匹配一个正则表达式,如果不成功,方法返回nil,如果成功,返回MatchData类的一个实例

exp:

e = /(\d+):(\d+)/ # match a time hh:mm 

md = re.match("Time: 12:34am") 

md.type >> MatchData 

md[0] # == $& >> "12:34" 

md[1] # == $1 >> "12" 

md[2] # == $2 >> "34" 

md.pre_match # == $` >> "Time: " 

md.post_match # == $' >> "am" 

分享到:
评论

相关推荐

    Ruby语言教程知识点详解 ruby重点知识点总结掌握.docx

    11.Ruby标准库与常用Gem 12.Ruby on Rails简介(扩展内容) 一、Ruby语言简介与安装 重点详细内容知识点总结 Ruby简介:Ruby是一种简洁、优雅且面向对象的编程语言,以其灵活性和易用性著称。 安装Ruby:介绍了...

    ruby中文文档中心资料

    总结起来,"ruby中文文档中心资料"是一份全面的学习资源,覆盖了Ruby语言基础、核心概念、元编程、标准库使用以及可能的Web开发实践。对于想要学习或提升Ruby技能的中文用户来说,这是一份宝贵的资料。通过深入学习...

    Ruby-FastJSONAPI一个用于Ruby对象的快速JSONAPI的序列化器

    **Ruby FastJSONAPI:...总结来说,Ruby FastJSONAPI是一个强大的工具,适用于需要高效、标准的JSON:API序列化的Ruby项目。它的简单性、高性能和灵活性使其成为许多开发者的首选,尤其是在构建API驱动的应用程序时。

    Ruby-Crystal的一个Html解析器类似于Ruby的Nokogiri

    1. **Crystal语言**:这是一种静态类型的、编译型的语言,它吸取了Ruby的灵感,同时提供了接近C/C++的性能。它支持面向对象编程,语法简洁,易于阅读。 2. **HTML解析**:解析HTML文档通常涉及将源代码转化为DOM...

    Ruby.for.System.Administration (English Version)

    - **模块和库**:介绍 Ruby 标准库中的常用模块,如文件处理、网络通信等功能。 ##### 2. **自动化任务** - **脚本编写**:教授如何编写 Ruby 脚本来自动执行常见的系统管理任务,例如文件备份、用户管理等。 -...

    Ruby 语法. Ruby 是一种开源的面向对象程序设计的服务器端脚本语言

    - **动态类型**:Ruby 使用动态类型系统,变量可以在运行时改变其类型。 - **简洁的语法**:Ruby 设计上注重代码的可读性和简洁性,减少了不必要的符号和括号。 - **块与迭代器**:Ruby 提供了强大的块(Block)和迭代...

    Ruby编程,实用程序员指南Programming Ruby, The Pragmatic Programmer's Guide

    Ruby是一种动态类型语言,支持面向对象编程、函数式编程等多种编程范式。它具有以下特点: - **简洁易读**:Ruby语法简洁明了,易于阅读和理解。 - **动态性**:支持运行时修改代码结构。 - **面向对象**:一切皆...

    Ruby语言教程.docx

    - **与其他语言的比较:** 不同于Java、C#或C,Ruby没有正式的语言规范,而是依赖于原始的C实现作为事实标准。 #### 二、Ruby的主要实现 **Ruby的实现:** - **原始C实现:** 这是Ruby最原始也是最广泛使用的实现...

    Ruby-rgeoRuby的地理空间数据的库

    总结来说,Ruby-rgeo是一个强大且全面的地理空间数据处理库,它提供了一系列的空间数据结构、几何运算方法,以及与行业标准格式的互操作性。无论你是想在Ruby项目中进行简单的地理位置处理,还是构建复杂的GIS应用,...

    ruby-2.4.5.tar.gz

    总结来说,这个压缩包包含的是Ruby 2.4.5的源码,用户需要在Linux环境下按照标准流程进行编译和安装。同时,提供的使用教程可以帮助用户顺利完成安装,尤其是对于初学者,这个教程将非常有用。如果涉及到Redis,用户...

    everyday scripting with ruby

    2. **动态类型**:Ruby是一种动态类型的语言,变量无需显式声明类型,可以随时改变变量的数据类型。 3. **面向对象**:一切皆对象,包括数字和字符串等基本数据类型。 4. **灵活的代码结构**:支持多种编程范式,如...

    Programming Ruby 2nd.pdf

    这是因为Ruby在很多方面都做了优化,比如其动态类型系统、强大的标准库以及丰富的第三方库等,这些都让Ruby成为了极具吸引力的选择。 #### 三、学习Ruby的意义 **1. 学习新思维方式:** 学习Ruby不仅仅是为了掌握...

    10Ruby 数组.docx

    此外,Ruby 拥有一个丰富且功能强大的标准库,能够极大地提高开发效率。 #### 二、Ruby 在 Web 开发领域的应用 Ruby 在 Web 开发领域有着广泛的应用,其中最著名的莫过于 Ruby on Rails(简称 Rails)。Rails 是一...

    03Ruby 注释.docx

    此外,Ruby还拥有一个丰富而强大的标准库,提供了大量的内置工具和功能,使得开发者能够快速构建出各种类型的应用程序。其中最为人所熟知的是Ruby on Rails(简称RoR)这一Web开发框架,它采用了“约定优于配置”的...

    RUBY语言入门教程

    - **标准库**:RUBY提供了丰富的标准库,覆盖网络编程、文件操作、数据库访问等多个领域。 - **Rails框架**:基于MVC模式的全栈Web开发框架,极大地简化了Web应用的开发过程。 - **Sinatra**:轻量级Web开发框架,...

    ruby_1_9_3_stdlib_rdocs.gz

    《Ruby 1.9.3 标准库深入解析》 ...总结,Ruby 1.9.3 标准库的文档是深入了解和熟练掌握 Ruby 编程的关键资源。通过深入研究这些文档,开发者可以充分利用 Ruby 的内置功能,编写出高效、优雅的代码。

    Ruby course

    根据给定的信息,我们可以提取并总结出Ruby编程语言的一些关键知识点。这些知识点主要涉及Ruby的基础概念、语法结构以及一些常用的功能特性。 ### Ruby基础概念 #### HelloWorld示例 Ruby是一种简单直观的语言,...

Global site tag (gtag.js) - Google Analytics