《Ruby从入门到精通》数据、表达式和流程控制

Ubuntu 11.10已经内置了Ruby,这个还蛮好的,嘎嘎

第二章 编程等于快乐:Ruby和面向对象概览

irb:交互式Ruby,输入就有结果的交互式环境(即时反馈)

与其他语言中对类的定义一样,Ruby中类名永远用大写字母开头

irb(main):001:0       最末尾的数字表示代码深度,也就是处于多少层的意思

用print和puts都可把内容打印到屏幕。其中puts命令会自动把输出光标放到下一行,而print在上次的光标位置继续打印文本。

Ruby中类的继承非常简单明了,就是建立了父类,子类会继承它所有属性,而且也一目了然。

一切都是对象:在Ruby中,几乎一切都是对象,任何操作都可以看作是通过方法来实现的。比如,计算加减法是使用内置类Fixnum的对象。我们也可以向Fixnum类增加自己的方法。

Kernel模块(注:Ruby中的Kernel模块只是代表“核心”,跟操作系统中的内核毫无关系)中的方法在Ruby的每个类和有效范围内都可使用。比如puts,而且不需要写出完整的命令,因为Kernel模块是被默认包含和搜索的。puts方法只接受一个自由变量。

第三章 Ruby的构造元素:数据、表达式和流程控制

Ruby提供了一种巧妙的手段,用between?方法来判断某对象是否处于指定的两个值之间,是则返回true。例如,age.between?(12,20)。

在Ruby中要执行一个循环操作,可以使用下列times方法,比如

5.times do ... end               或者  5.times {...}

Ruby中有一种创建循环的机制,叫做迭代子(iterator)。所谓迭代子,是指在列表条目中逐步递进的东西。

迭代子可以上溯,可以下溯,还可以调用step方法,比如

1.upto(5){...}                  10.downto(5){...}           0.step(50,5){...}

如果字面字符串包含有多行,那么就应该使用%q{和}

也可以用引入文档(here document)来构建字面字符串。<<标记着字面字符串的开始,后接所选择的分界符,分界符甚至可以是一串单词哦

插写(interpolation)是指表达式结果插入字面字符串的过程。在字符串中插写的方式,是把表达式放在#{和}符号中。

当然,不用插写方式,把表达式放到字符串之外,也可以得到和前面相同的结果。

------------------------------------------------正则表达式------------------------------------------------

替换:sub方法替换第一次遇到的指定内容,gsub替换所有的指定内容

正则表达式中基本的特殊字符和符号

字符含义
^用于行开始的锚
$用于行结束的锚
\A用于字符开始的锚
\Z用于字符结束的锚
.任意字符
\w任何字母、数字或下划线
\W不匹配\w的任何内容
\d任何数字
\D不匹配\d的任何内容(非数字)
\s空白(空格、制表符、换行符等)
\S非空白(任何可见字符)

正则表达式字符和子表达式修饰符

修饰符说明
*匹配零次或多次前面紧跟的字符,并尽可能多地匹配
+匹配一次或多次前面紧跟的字符,并尽可能多地匹配
*?匹配零次或多次前面紧跟的字符,并尽可能少地匹配
+?匹配一次或多次前面紧跟的字符,并尽可能少地匹配
要么匹配一次,要么全不匹配前面紧跟的字符
{x}匹配x次前面紧跟的字符
{x,y}匹配最少x次、最多y次前面紧跟的字符
匹配查询:检查某个字符串是否匹配所选择的模式

=~是匹配查询运算符,如果字符串与运算符后面的正则表达式能够匹配,则该表达式结果为true。

String类提供的名为match的方法,提供了更为强大的能力。

---------------------------------------------------数组---------------------------------------------------

数组不需要设置预定义空间,或手工分配元素。

在Ruby中,可以使用“压入数据”的方法,向数组末尾加入内容。比如使用“<<"或者调用push方法

x = [ ]

x << "Word"

数组是先进先出系统,数据既能被压入数组末尾,也能从数组末尾弹出(弹出是从数组末尾检索数据并同时将其删除的过程),调用pop方法可以将元素弹出

如果数组中全都是字符串,可以对该数组调用名为join的方法,将所有元素连接起来形成一个大字符串。

join方法可接受一个可选参数,放在结果字符串的每个元素之间。

split方法可以将字符串切分成字符串数组

inspect方法可以直接打印输出

数组中迭代的方法很简单,each方法遍历数组中的每个元素,把该元素当作参数,传递给用户提供的代码块。

collect方法在数组中逐个元素地进行迭代,并用代码块中表达式的结果,对该元素进行赋值

数组的其他操作:数组加法和串连(也就是合并)+

                                数组减法 -

                                检查数组是否为空 empty

                                检查数组是否有某个元素 include?

                                访问数组第一个和最后一个元素 first last

                                反转数组元素的顺序 reverse.inspect

------------------------------------------------------散列表-------------------------------------------------------

散列表中的对象不在列表中给定位置,而是给定一个指向对象的键(key)。散列表更像字典,而不像列表,因为它没有确定的顺序,只有键和值之间的简单链接。比如:

dictionary = { 'cat' => 'feline animal', 'dog' => 'canine animal' }

其中=>前为键,后为值

散列表可以被看作为数组,其元素具有名字,而非位置序号。我们甚至可以用与数组相同的方法,来改变散列表元素的值。

检索键:(x是散列表)x.keys.inspect

删除元素:x.delete(" “)

散列表中有可能使用散列表(或任何类型的对象),甚至数组,甚至散列表中的散列表作为元素。

---------------------------------------------------流程控制-------------------------------------------------------

ifunless可以根据条件执行不同的操作来控制程序流程

Ruby中还提供了elsif表示“否则如果”,case...when来分条件处理

each方法接受单个代码块作为参数,该代码块的定义位于{和}符号之间,或位于do和end之间。我们可以自己编写方法来处理代码块,或者使用yield方法(它能自动检测传递给它的代码块,并将控制权移交给该代码块,也可以用lambda方法,把代码块存储在变量中。

其他

Ruby提供了Time类来处理日期和时间。

Time类允许根据任意日期创建Time对象

Time.local(year,month,day,hour,min,sec,msec)

在Ruby中,过于大的数字交给Bignum类处理

Ruby中的符号相当独特,它不包含值或对象,不像变量那样,而是用作代码中固定的名字。符号可以减少内存占用,而且使代码更为简洁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值