第1章ruby初识

1.1.1ruby命令的执行方法

print("Hello")

p方法
无论是print方法还是puts方法,输出数值1和字符串"1"时,结果都是单纯的1,这样,我们有时候会无法判断结果到底属于哪个对象,p方法解决了这个问题,数值结果和字符串结果会以不同的形式输出。

print "100"
print 100
puts "100"
puts 100
p "100"
p 100

100100100
100
"100"
100

像这样,输出结果为字符串时,输出结果会被双引号括起来,一目了然。另外,使用 p 方法时,换行符(\n)、制表符(\t)等特殊字符不会转义,会像下 面那样直接输出。

1.12条件判断

if 条件 then
    条件成立时执行的语句
else
    条件不成立时执行的语句
end 
注意:then是可以省略的。

1.13循环

1.13.1while语句

while 循环条件 do
    循环语句
end

1.13.2times方法

循环次数.times do
    循环语句
end

2方便的对象

像数组、散列这样保存对象的对象,我们称为容器(container)。

2.1数组

2.1.1数组的创建

names = ["a", "b", "c"]

在保存对象时,如果指定了数组中不存在的索引值时,则数组的大小会随之改变。即Ruby数组的大小是按实际情况自动调整的。
示例

2.5.3 :001 > names = ["zhao", "qian", "sun", "li"]
 => ["zhao", "qian", "sun", "li"] 
2.5.3 :002 > names[4] = "wang"
 => "wang" 
2.5.3 :003 > names
 => ["zhao", "qian", "sun", "li", "wang"] 
2.5.3 :004 > 

2.1.5数组的元素

任何对象都可以作为数组元素保存到数组中。
Ruby数组还支持多种不同对象的混合保存。

2.5.3 :004 > mixed = [1, "wang",3,"李"]
 => [1, "wang", 3, "李"] 
2.5.3 :005 > mixed.class
 => Array 

像时间,文件等对象也都可以作为数组的元素。

2.1.6数组的大小

array.size

2.1.7数组的循环

Ruby提供了each方法。
语法如下:

数组 .each do |变量|
    循环语句
end
each后面do~end之间的部分叫做块(block)。 

2.2散列

散列(hash)也是一个程序里常用到的容器。散列是键值对(key-value pair)的一种数据结构。在 Ruby 中,一般是以字符串或者符号(Symbol)作为 键,来保存对应的对象。

2.2.1什么是符号

符号(symbol)是一种对象,一般作为名称标签来使用,用来表示方法等对象的名称,可以将符号简单理解为轻量级的字符串。
创建符号,只需要在标识符的开头加上:就可以了。
以下两种方式实现功能相同。

 sym = :foo
 => :foo 
 sym.class
 => Symbol 
 sym2 = :"foo"
 => :foo 
 sym2.class
 => Symbol 

符号能实现的功能,大部分字符串也能实现,那为什么还要使用符号呢?
像散列键这样只是单纯判断“是否相等”的处理中,使用符号会比字符串更加有效率,因此在实际编程中我们也会经常用到符号。

符号和字符串可以任意转换,对符号使用to_s方法可以得到字符串。
对字符串使用to_sym方法,则可以得到对应的符号。

2.5.3 :001 > sym = :foo
 => :foo 
2.5.3 :002 > sym.to_s
 => "foo" 
2.5.3 :003 > "foo".to_sym
 => :foo 

2.2.2散列的创建

使用{}把创建的内容括起来,用=>来定义获取对象时所需的(key),以及键相对应的对象(value)。

address = {:name => "高桥", :pinyin => "gaoqiao", :postal => "1234567"}

将符号当作键来使用时,程序还可以像下面这么写:

address = {name: "高桥", pinyin: "gaoqiao", postal: "1234567"}

2.2.3散列的使用

散列名 [键]
示例

2.5.3 :001 > address = {name: "高桥", pinyin: "gaoqiao"}
 => {:name=>"高桥", :pinyin=>"gaoqiao"} 
2.5.3 :002 > address[:name]
 => "高桥" 
2.5.3 :003 > address[:pinyin]
 => "gaoqiao" 
2.5.3 :004 > address[:tel] = "000-1234"
 => "000-1234" 
2.5.3 :005 > address
 => {:name=>"高桥", :pinyin=>"gaoqiao", :tel=>"000-1234"} 
2.5.3 :006 > address.class
 => Hash 
2.5.3 :007 > 
  address = {name: "高桥", pinyin: "gaoqiao", tel: 1234-000}
  address[:tel].class
 => Integer 

2.2.4散列的循环

语法如下:

散列 .each do |键变量, 值变量|
    循环语句
end 

示例如下:

2.5.3 :001 > address = {name: "高桥", pinyin: "gaoqiao", tel: 1234}
 => {:name=>"高桥", :pinyin=>"gaoqiao", :tel=>1234} 
2.5.3 :002 > address.each do |key, value|
2.5.3 :003 >     puts "#{key}: #{value}"
2.5.3 :004?>   end
name: 高桥
pinyin: gaoqiao
tel: 1234
 => {:name=>"高桥", :pinyin=>"gaoqiao", :tel=>1234} 

2.3正则表达式

在Ruby中处理字符串时,我们经常会用到正则表达式(regular expression)。可以非常简单的实现以下功能:
·将字符串与模式(pattern)相匹配
·使用模式分割字符串

某些使用场景:
1.找出包含xx字符串的行。
2.抽取oo和xx之间的字符串。

判断字符串是否适用于某模式的过程成为匹配,如果字符串适用于该模式则成为匹配成功。


正则匹配

匹配的例子
创建正则表达式的语法如下所示:

/模式/

例如,我们希望匹配Ruby字符串的正则表达式为:

/Ruby/

把希望匹配的内容直接写出来,就这么简单。匹配字母、数字、汉字时,模式按字符串原样写就可以了。

我们使用=~来匹配正则表达式和字符串,它与判断是否是同一个对象时所用到的==有点像。
匹配正则表达式与字符串的方法是:
/模式/=~希望匹配的字符串
若匹配成功,返回匹配部分的位置。
若匹配失败,返回nil。
示例如下:

2.5.3 :005 > /Ruby/ =~ "Rubyyyy"
 => 0 
2.5.3 :006 > /Ruby/ =~ "rubyyy"
 => nil 
2.5.3 :007 > /Ruby/i =~ "rubyyy"
 => 0 

正则表达式右边的/后面加上i表示不区分大小写进行匹配。
除此之外,正则表达式还要很多写法和用法,将在16章介绍。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • Qo_Tn 第一章 学习 1.1 Ruby ruby 特性 弱类型 语言 1.3 下载安装Ruby 和 Rai...
    Qo_Tn阅读 205评论 0 0
  • 当我们开始写这本书时,我们有一个宏大的计划(那时我们还比较年轻)。我们希望将 Ruby 这门语言从头至尾地描述一遍...
    Cloneable阅读 461评论 0 0
  • Perl 6 from Ruby - Nutshell 基本语法 语句结束分号 Ruby 使用换行(有几个例外)来...
    焉知非鱼阅读 748评论 0 1
  • 今天review了一次ruby编程规范,把一些之前我不熟识的在这里记录下来。 对于没有主体的类,倾向使用单行定义。...
    john_ny阅读 725评论 0 0
  • 因为工作关系需要用到Ruby和Rails,于是在端午假期里花了点时间快速的学习了下。这里做一个简单的记录。 基础数...
    shixiongfei阅读 678评论 0 1