赞 | 6 |
VIP | 356 |
好人卡 | 3 |
积分 | 2 |
经验 | 297560 |
最后登录 | 2022-1-18 |
在线时间 | 509 小时 |
Lv1.梦旅人 有事烧纸
- 梦石
- 0
- 星屑
- 154
- 在线时间
- 509 小时
- 注册时间
- 2005-10-22
- 帖子
- 6982
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
今天图书馆翻到了Ruby Coolbook,这个系列一直是非常出色的进阶教程
趁这个机会把ruby系统的补课一下,一边翻一边摘抄笔记
如果你是高手,当然不需要看本文了
如果你是新手,本文可能比较难懂
如果你已经脚本基础入门了,那么本篇可能很适合你
因为涉及到的一些知识都是比较进阶的了,呵呵
按照书里的顺序开始
第一章 字符串
ruby最简单的字符串语句:
string = "梦想世界 在你手中"
#=> "梦想世界 在你手中"
计算长度的话:
string.length
这里需要说的是,不同于java将字符串视为一个字符序列,Ruby将字符串视为一个字节序列。
区别在哪里呢?法语字符串包括14个字母3个空格,看上去长度是17,但是其中一个字母(带重音的e)被表示为2个字节,那ruby计算的结果会是18
如果我们要给字符串赋很长的值,可以这么做:
string = <<EOF
壁炉里烧着精灵的头骨,紫色藤条爬上了长在泥中的旧木桌。
绿色蒸腾的雾气使石墙湿淋淋的,我在淡蓝的烛光前发着愁,不知怎样在我的羊皮纸上写下第一个字。
EOF
#=> "壁炉里烧着精灵的头骨,紫色藤条爬上了长在泥中的旧木桌。\n绿色蒸腾的雾气使石墙湿淋淋的,我在淡蓝的烛光前发着愁,不知怎样在我的羊皮纸上写下第一个字。\n"
这被称为here documents结构
他容易阅读,要求定义多行字符串,仅当分析其遇到某行上的特定字符串时才结束。而且这个字符串是灵活的
那么,如果我们要获得string中某段字符串的话,会有多少选择呢?
幸运的是,ruby给不同编程习惯的人提供了很多种方法
比如
string = "My first string"
要提取到"first"的话,可以:
string.slice(3, 5) #=>"first"
也可以用c风格的字节数组方式访问:
string[3].chr + string[4].chr + string[5].chr + string[6].chr + string[7].chr
#=>"first"
当然,也有符合python语言风格的:
string[3, 5] #=>"first"
这里我们讲到ruby的一些方法后面会带有?或者!,顺便就说说他们的作用
比如
string.upcase #=>"FIRST"
string #=>"first"
string.upcase! #=>"FIRST"
string #=>"FIRST"
看出作用了么?简单地说,不带!的方法一般会返回一个新的对象,而不改变原对象的内容。但是带!的方法就会改变原对象的值了。术语的话这被称为Dangerous方法
带?的就更容易懂了,一般就是返回真/伪值得方法尾部添加?,就好象方法名提出了一个是非题的问题,要求的一个true/false的答案一般
例如:string.empty?
这点很符合Ruby的设计原理:Ruby是一门主要用于人类读写,其次用于计算机理解的语言
呵呵,下面说说Rm经常看到的#{}
其实作用是将变量带入字符串
简单的例子是:
number = 66
"#{number}RPG是一个牛逼的网站" #=>"66RPG是一个牛逼的网站"
当然,Ruby支持的不仅仅如此
任何在#{}中的内容,都会被认为是一个表达式。该表达式的结果被替换为字符串,如果表达式结果不是字符串,那么会自动调用to_s方法
所以,我们甚至可以这么做:
"#{x=60; x+=6}RPG是一个牛逼的网站" #=>"66RPG是一个牛逼的网站"
x #=>6
如果你要避免出现字符串变量插入的情况,只需要加入\就可以了,例如
"\#{number}" #=>"\#{number}"
或者使用单引号
'#{number}' #=>"\#{number}"
下面我们了解一下printf-style字符串
printf-style字符串是C风格的方法,具体如下例:
string = '%s是一个牛逼的网站'
string % '66RPG' #=>"66RPG是一个牛逼的网站"
string % 'google' #=>"google是一个牛逼的网站"
呵呵,拿要是我们准备分割一个字符串,该怎么做呢?
熟悉rm的都知道了,当然就是split方法了
"你 我 他".split(/\s+/) #=>["你","我","他"]
split方法将正则表达式用作分隔符。
那么如果我连空格都要保存,咋办捏?
简单,使用正则表达式/(\s+)/,其包括了一组圆括号,因此分隔符字符串本身被包括在返回链表中。所以:
"你 我 他".split(/(\s+)/) #=>["你"," ","我"," ","他"]
此外,ruby还未键盘序列提供表达方式,比如“\C-x”表示按着control并单击x所得到的序列。
下面有个有趣的问题,我们能不能把一个字符串里的空白字符抽调?
比如把“00 145 0456 177”中的空格去掉?
直接使用strip方法就可以了
那什么属于空白字符呢?它们包括:空格、\t、\n、\r、\f
哦了,基础常用的知识就这点了
其他的内容偶没有摘抄,一般不是特殊情况的话不会去研究,而且看了有点头大
先写这么点好了,呵呵
不要说这个全是书上的东西米用哦,书是偶借的要还的嘛,留个笔记备忘还是不错的~ |
|