Project1

标题: 【学院派】Ruby Coolbook学习笔记 一 [打印本页]

作者: 雷欧纳德    时间: 2008-4-19 05:11
标题: 【学院派】Ruby Coolbook学习笔记 一
今天图书馆翻到了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


哦了,基础常用的知识就这点了
其他的内容偶没有摘抄,一般不是特殊情况的话不会去研究,而且看了有点头大
先写这么点好了,呵呵

不要说这个全是书上的东西米用哦,书是偶借的要还的嘛,留个笔记备忘还是不错的~
作者: 小叽    时间: 2008-4-19 05:17
好朋友的评价!  —— 好烂啊!{/cy}

——我承认,我妒忌雷子的才华
作者: 雷欧纳德    时间: 2008-4-19 05:19
以下引用小叽于2008-4-18 21:17:53的发言:

好朋友的评价!  —— 好烂啊!

居然不支持咿刚,好歹我也打了半个钟头了。。。。
作者: TERENCE    时间: 2008-4-19 05:33
不会啊~~~我觉得
小细节写的很清楚啊~~~~

当成 RUBY细节 备忘录还不错

{/qiang}
作者: cheyenne    时间: 2008-4-19 05:45
我在复旦图书馆也见过Ruby教程,拿起来想翻一下,不小心脱手了……
然后我把书放回去,去了医务室包扎我可怜的脚趾头……
作者: 小叽    时间: 2008-4-19 05:47
真可怜!
作者: 雷欧纳德    时间: 2008-4-19 05:48
以下引用cheyenne于2008-4-18 21:45:40的发言:

我在复旦图书馆也见过Ruby教程,拿起来想翻一下,不小心脱手了……
然后我把书放回去,去了医务室包扎我可怜的脚趾头……


今天就在和同学说那书可以用来当板砖,原来就真的有人遇害了。。。真不错
作者: 禾西    时间: 2008-4-19 06:01
800頁那本嗎?--望天
作者: havealook    时间: 2008-4-19 06:49
貌似不错{/qiang}

以前的脚本教程讲得太多的有关语法的。。。
今天总算找到个讲RGSS的方法了
作者: 水迭澜    时间: 2008-4-19 06:56
同望天……
胃同学,你是复旦的么……我有一高中同学在那……

P。S 很好用的东西啊啊……支持继续写下去……
作者: orochi2k    时间: 2008-4-19 07:05
华师大阅览室有,不能借出来...怨念...
作者: 雷欧纳德    时间: 2008-4-19 07:18
以下引用orochi2k于2008-4-18 23:05:39的发言:

华师大阅览室有,不能借出来...怨念...


偶们图书馆整套cookbook都有耶。。。中英文都有- -+
而且随便借orz
今天一同学就顺便把犀牛书和狐狸书借走了。。。。说起来ruby这本是啥?狼书么?
作者: link006007    时间: 2008-4-19 07:22
到现在只知道学校图书馆门朝哪里开{/hx}
作者: 非法用户    时间: 2008-4-19 08:01
没想到还有Ruby的相关书籍,我这得图书馆只有教你如何上网的书籍...
作者: orochi2k    时间: 2008-4-19 08:03
以下引用非法用户于2008-4-19 0:01:31的发言:

没想到还有Ruby的相关书籍,我这得图书馆只有教你如何上网的书籍...

呃...其实还有 RUBY胃 和 普如古兰因 RUBY  这两本...
作者: orochi2k    时间: 2008-4-19 17:41
以下引用鸿剑于2008-4-19 6:20:53的发言:

雷子,我上个月在枣庄鲁南书城发现了一个几乎10厘米厚的RUBY教程……
忘了书名了,你有空可以看看[这书不错]。

那个...貌似,普遍都是那么厚...
作者: 沉影不器    时间: 2008-4-19 18:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: 雷欧纳德    时间: 2008-4-19 19:25
以下引用鸿剑于2008-4-19 6:20:53的发言:

雷子,我上个月在枣庄鲁南书城发现了一个几乎10厘米厚的RUBY教程……
忘了书名了,你有空可以看看[这书不错]。


量量手上这本。。。。嗯,4.3厘米- -+


以下引用沉影不器于2008-4-19 10:38:07的发言:

好笔记


以下引用雷欧纳德于2008-4-18 21:11:13的发言:
此外,ruby还未键盘序列提供表达方式,比如“\C-x”表示按着control并单击x所得到的序列


问一问这个怎么解释?怎么用?


例如
"\C-a\C-b\C-c"    #=>"\001\002\003"
"\M-a\M-b\M-c"    #=>"\341\342\343"

其实是ruby对于引用不可打印字符的一种转义机制
作者: IamI    时间: 2008-4-19 19:29
以下引用雷欧纳德于2008-4-19 11:25:27的发言:


以下引用沉影不器于2008-4-19 10:38:07的发言:

好笔记


以下引用雷欧纳德于2008-4-18 21:11:13的发言:
此外,ruby还未键盘序列提供表达方式,比如“\C-x”表示按着control并单击x所得到的序列


问一问这个怎么解释?怎么用?



例如
"\C-a\C-b\C-c"    #=>"\001\002\003"
"\M-a\M-b\M-c"    #=>"\341\342\343"

其实是ruby对于引用不可打印字符的一种转义机制

什么意思?指的是Ascii码的前面一段吗?
还有,沙发很美,花花的一片……
作者: 御灵    时间: 2008-5-24 07:44
发布完毕。
http://rpg.blue/web/htm/news1061.htm
vip+2




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1