与其临渊羡鱼,不如退而结网!

Ruby笔记(一)

上一篇 / 下一篇  2009-02-04 17:23:11 / 个人分类:其他

2009年2月04日3:49下午
#R"o7d6Ve;n0一、模块(Module)的作用:51Testing软件测试网 C|fN8X~@?
1.可以被其它程序代码重复使用;
c'p2o$W4oD02.提供了一个命名空间(namespace),防止命名冲突;51Testing软件测试网N5g;T"lL@G
3.实现了类似多重继承的功能;51Testing软件测试网6I&r Xd bZ/^/`;r
51Testing软件测试网RzS;pd
二)Include和Extend
ZLuYb1sn$c [C0include 方法为一个类的所有对象包含某个模块; extend 方法为一个类的某个对象包含某个模块。
n O;m(A [9u Xf:Pl0(1)#E include 方法为一个类的所有对象包含某个模块。51Testing软件测试网 KO2|B Q3c)Z
module Me51Testing软件测试网 Vo#B2eg
    def sqrt(num, rx=1, e=1e-10)51Testing软件测试网I#u3i4o$OP:t Nm i8Z7K
        num*=1.051Testing软件测试网%]3s8c7Sk i8IlMyP
        (num - rx*rx).abs <e ? rx : sqrt(num, (num/rx + rx)/2, e)51Testing软件测试网$Pf C H(?
    end51Testing软件测试网 Nj M9}%iR$s;yi
end
Fc9a s r:f"Y0
I Qb8B V*t z0class Person51Testing软件测试网"L+z+a@Q0{
    def talk
\0^+a g-wO8mI `0        puts "I'm talking."51Testing软件测试网ls6g3M5@;ZR#h UC5H
    end51Testing软件测试网d/}{;BG1~(Eq
end51Testing软件测试网+] M/Mmx,M$J
51Testing软件测试网`iBI%z{"T;tYu
class Student < Person51Testing软件测试网2u2jeDA&mE
    include Me51Testing软件测试网 k U1sb'_5{(kJ/n
end51Testing软件测试网UFlyy \%OO

s*VC H}!g2O-V0aStudent=Student.new51Testing软件测试网 V&_ X3kD G
aStudent.talk # I'm talking.
v+VBw$q6X g~ {0puts aStudent.sqrt(20.7,3.3) # 4.54972526643248
Z%N]%K HFcO0
(l`(k!FAG-m0(2)#E extend 方法为一个类的某个对象包含某个模块。51Testing软件测试网'R c7Y5pC4_Gm_V | _
module Me51Testing软件测试网0vn @"N7HpW^)p9i
    def sqrt(num, rx=1, e=1e-10)
pua8dn1s0        num*=1.0
&}jA Xu+uG0        (num - rx*rx).abs <e ? rx : sqrt(num, (num/rx + rx)/2, e)
/Ob1|3|DS wI3uyC(x0    end51Testing软件测试网C B3AL+bz,h5FG,z
end51Testing软件测试网 _-Ds8q)dG XJ
51Testing软件测试网N"F1V2zt/qVU0p
class Student
`u:r [/`9M+Y0end
E?Q.p&Ds;B051Testing软件测试网bMbF;J@x0K
aStudent=Student.new51Testing软件测试网'r&M QYE+](}g
aStudent.extend(Me)
|x#P aCA0puts aStudent.sqrt(93.1, 25) # 9.6488341264631551Testing软件测试网d ^8a-]y/wmI)@

7l;A:X5vk1Be-KY0二)Require和Load51Testing软件测试网 `B'hGF!~Oq
1.require包含文件,只加载一次,遇到同一文件时自动忽略;不同路径下的同名文件会多次加载。51Testing软件测试网0|z(XY'FziN[
2.load包含文件,加载多次,即使是相同路径下同一文件。
^3x z~K r5YV _051Testing软件测试网&Y L,lzH$T KL!r
NB:51Testing软件测试网(I ^R_oR|k
1)require,load用于包含文件;include,extend则用于包含模块。51Testing软件测试网#dW"t9H-J
2)require加载文件一次,load加载文件多次。
D4M|O K;I!E W[03)require加载文件时可以不加后缀名,load加载文件时必须加后缀名。
Xp s8R,Bc04)require一般情况下用于加载库文件,而load用于加载配置文件。
NiG"E"Z y[Z0
k+L%g;JU/N0二、数组51Testing软件测试网6t6e5|`;p
1.Ruby中,同一个数组中的元素可以是不同类型的,如arr[]=["3","2.5","This is a string"]51Testing软件测试网n?;J4t@1s0|6J/Q
2.Ruby以整数作为下标,访问数组元素通过数组下标,第一个数组元素的下标为0,最大的数组下标为 数组元素个数减一。当数组下标为负值时表示从数组最后向前读取第几位。如:51Testing软件测试网%j;["Vw@V` y D
#数组赋值51Testing软件测试网2|*C9taF.QV(O9h
arr=[3,4,5,6,7,8,9]
[0]0?6z0l,T%{ e051Testing软件测试网DS*h'n|8P9L%lk
#下面两条代码都是读取第一个数组元素值51Testing软件测试网q*t sG0Ul5u9e ]B:z
puts arr[0]                    #351Testing软件测试网"jh]g?8e0p;}
puts arr.first                      #351Testing软件测试网on-_ats3Se.f

z.i? C;SH3t+Z0#下面四条代码都是读取最后一个数组元素值
$q Df6E9ia v0puts arr[arr.length-1]        #951Testing软件测试网O*SQ&m} S
puts arr[arr.size-1]             #9
1H,y {5W t8ijo2a*I0puts arr.last                 #9
oO5D0Y;c x*[h0puts arr[-1]                #951Testing软件测试网V*HKMeb

6T)FsB-z2T1hj c4R0#倒数第二个元素的值51Testing软件测试网h/ClRXA d.}GJ}
puts arr[-2]                 #851Testing软件测试网3q\4k}B8\g
51Testing软件测试网gx]0L*b.n8V
#第二个到第四个元素的值
/|p]?+~4?] v ]Hz0print arr[1..3] ,"\n"           #456
B+VA"q~Nu2H~iR051Testing软件测试网7L2D2CJ.S2LF
#第二个到第四个元素且不含第四个元素的的值
+Xn]r6p4j9j0print arr[1...3] ,"\n"          #45
7GfQ5uq f051Testing软件测试网c b+af Y9B6SL
#从倒数第三个元素开始取值,且自该元素起始向后取两个元素的值,注意含该元素
NX]"Wpcs9no0print arr[-3,2] ,"\n"           #78
HL-q:l:W:ZB.RVD~ z0
dm:z9n^ z|03.Ruby的数组大小可以动态变化,可以随时增删数组元素。51Testing软件测试网7P9uc+V.F'h ^Ha#]

1ZUkm^!fhAs0~0# 数组输出,赋值及增删、插入51Testing软件测试网@ mvdCW:Oa*@%g/J:r
arr=[4,5,6]51Testing软件测试网Jk1{S%sG{p{7i
print arr.join(", "),"\n"         #4, 5, 6(将数组arr转换成字符串输出,用", "隔开每个元素,并且换行。)
*szpI&HS0arr[4] = "m"                 #把4号索引位置元素赋值为"m"
8i9xden+J%b_Y0print arr.join(", "),"\n"         #4, 5, 6, , m51Testing软件测试网2XMI.Z+q)Mx
print arr[3] ,"\n"              #打印3号索引位置元素 #nil
$I L|N9@0arr.delete_at(3)               #删除3号索引位置元素
L@5l^ieQ,a0print arr.join(", "),"\n"         #4, 5, 6, m
M3Jd1s!L,?:g0arr[2] = ["a","b","c"]          #把2号索引位置元素赋值为["a","b","c"]
qT,QK%MekV0print arr.join(", "),"\n"         #4, 5, a, b, c, m
&IL[Kh$pUY1y;T0print arr[2] ,"\n"              #打印2号索引位置元素 #abc51Testing软件测试网S7MLQJ!J
arr[0..1] = [7,"h","b"]          #把0..1号元素替换为7,"h","b"__这里有点迷惑
wj7Hj2V0print arr.join(", "),"\n"         #7, h, b, a, b, c, m
TJ8xlo\Q3n0arr.push("b" )                #加入元素"b"
O6F)veP[0print arr.join(", "),"\n"         #7, h, b, a, b, c, m, b
jl2r\ `/m8{"~2d0arr.delete(["a","b","c"] )        #删除元素["a","b","c"]
*^(E(ek%_3]A*J#_ Zi0print arr.join(", "),"\n"         #7, h, b, m, b51Testing软件测试网7E4W"D2]jF y:M
arr.delete("b")               #删除所有元素"b"——所有值为“b”的元素都删除51Testing软件测试网/q-L k W EU"qm
print arr.join(", "),"\n"         #7, h, m51Testing软件测试网W bt~*w'th7U
arr.insert(3,"d")              #在3号索引位置插入元素"d"
{4IA'b+}+ik0E]_@0print arr.join(", "),"\n"         #7, h, m, d51Testing软件测试网E1Y?"fcN
arr<<"f"<<2                 #加入元素"f";加入元素2
?-[8S"N0K,n c#J~de;j0print arr.join(", "),"\n"         #7, h, m, d, f, 251Testing软件测试网\ Hu0F7X _9]#K]:s,KMg
arr.pop                     #删除尾元素51Testing软件测试网*l*z?T K[&r
print arr.join(", "),"\n"         #7, h, m, d, f
Z3XKi$@(B&?7y.v0arr.shift                    #删除首元素
1JKz#Z R%G'kL`0print arr.join(", "),"\n"         #h, m, d, f51Testing软件测试网.D9EKS K8\;F o
arr.clear                    #清空数组arr51Testing软件测试网UyyH-o)C}xV7R
print arr.join(", "),"\n"         #
fi|D1{,C&i051Testing软件测试网:s }+O%Yhxx%j
4.数组运算51Testing软件测试网B3a9h2LJ0b*W
#定义两个数组,并赋值51Testing软件测试网'xT1Th'Md"N P]
aaaa=[" aa ",4,5," bb "]
m;gj9VwA*G0bbbb=[4,1,3,2,5]
,z6H!jLz0Dr.Pm0print aaaa + bbbb ,"\n"         # aa 45 bb 4132551Testing软件测试网.u@5y,[ u ]
51Testing软件测试网P*|(pQw3^
print aaaa * 2 ,"\n"            # aa 45 bb aa 45 bb
U0u/yU"na2Ef0print bbbb - aaaa ,"\n"         #132
MRk#w6zc.Qd!M.M0
"JZ8z9P;G-x0#并运算;交运算
#Ln+_7x/Y a i0print aaaa | bbbb ,"\n"          # aa 45 bb 13251Testing软件测试网0qM5du6Q ]
print aaaa & bbbb ,"\n"         #45
XE xAg0
#_}Vg ['amO.m0#排序;倒置51Testing软件测试网)[vq.Ab
print bbbb.sort ,"\n"            #1234551Testing软件测试网 ]4C-fB v
print aaaa.reverse ,"\n"         # bb 54 aa
P/J,i'LA#a l0S0
t zD aZ*vE0三、字符串51Testing软件测试网NTnnoe"SLj
1.字符串是String类的对象,一般使用字面值来创建。51Testing软件测试网2x,hm'LFf%|-T
2.%q 用来生成单引号字符串;%Q用来生成双引号字符串。%q或者%Q后面跟着的是分隔符,可以是配对的! !; / /; < >; ( ); [ ] ;{ };等等。51Testing软件测试网7H1^Co2t C r
3.一个数组可以用join 方法转换成字符串,join( ) 内的参数也是一个字符串,用来分隔数组的每个元素,例如:arr.join(", ")。
7^ U!P)a;@0G7q04.转义字符:51Testing软件测试网.N@!s@ mX
(1)当“'”这类的字符在输出的字符串中时,需要进行转义,既可以使用“\'”将其输出。
5e/Fc.[X3k8t#\[0(2)在双引号扩起来的字符串中,不仅可以使用各种转义符,而且可以放置任意的Ruby表达式在 #{ } 之中,这些表达式在使用这个字符串的时候被计算出值,然后放入字符串。51Testing软件测试网 t6dkQU6CP&v1r
(3)其他
y os4o*H!_n,S(D0\t    Tab
+WV:WnK E D0\n    换行51Testing软件测试网%zc?moX'd$z
5.需要注意的是,字符串的索引位置和数组一致,起始索引位置为 0.51Testing软件测试网)hG!N)U&yxl
6.示例:
hy}$gTp HEi0str1 = 'this is str1'
P$C? H7j)m\0str2 = "this is str2"51Testing软件测试网5F4r*ZMe+o7j
str3 = %q/this is str3/51Testing软件测试网 @g(p_L+Wm
str4 = %Q/this is str4/
i)w~;o4|9A |7H0#str5是一个字符串文档,从 <<和文档结束符的下一行开始,51Testing软件测试网 [ c1_+B^s2~
#直到遇到一个放置在行首的文档结束符,结束整个字符串文档。51Testing软件测试网7W1o.f,`F
str5 = <<OK_str51Testing软件测试网%[3q`"cqpm
        Here is string document, str5
9zZ{![W!M0            line one;51Testing软件测试网U#HiXbO6i
            line two;
&`6N!K:cuS;^[0            line three.
bbc)~;Pc&[,s\0        OK51Testing软件测试网*U8s |O6oOU
    OK_str51Testing软件测试网 wX0?ty!R
puts str3
LH|j*I:wG1D `$v0puts str4
KE5B(N p#e/FG4]:h"Rk0puts str5
A-N$m;Ka.KPe0
G T.mSD(t0str = ' this' + " is"
)Q+m5Drlf7z0str += " you"
Y?7S d9\3V5Hh#s0str << " string" << " ."51Testing软件测试网daS4Tt6U
puts str*2                 # this is you string . this is you string .表示该内容重复两遍输出。51Testing软件测试网*m pHo&M3q?:b]
puts str[-12,12]             #you string .
;BC*B3c}/[F Li051Testing软件测试网F2]-X"Z7p k
四、正则表达式51Testing软件测试网"Mg#rvp4XB!c
正则表达式(regular expression)描述了一种字符串匹配的模式。51Testing软件测试网?Ea.B W%VUG!H
1.创建正则表达式:51Testing软件测试网+u2wK+^m Am
(1)构造器显示创建;
Gk I%FX-@[m0U?0(2)字面值形式创建;
2y:O6^-K.Hd#N&u9my0(3)正则模式创建;51Testing软件测试网D {1X eC&E3Fy;]} Y!n
2.匹配一个正则表达式,用“=~”。 返回模式在字符串中被匹配到的位置,否则返回nil。51Testing软件测试网#M`8S%Q'hf
不匹配一个正则表达式,用“!~”。 “!~”用来断言不符合一个正则表达式,返回 true,flase。
:n?}u3ey}.Y03.字符51Testing软件测试网9XQtEF
特别字符
Z x,c B/js0特别字符                    描述51Testing软件测试网&~vX"b1u
( )        标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使        用 \( 和 \)。51Testing软件测试网3v-|$d M]An4}:O6p
[]        范围描述符 (比如,[a - z] 表示在a 到 z 范围内的一个字母), 要匹配 [,请使用 \[。
8x&Fl#Nj9c0{}        标记限定符表达式。要匹配 {,请使用 \{。
vNfo)bH$R0\        将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。51Testing软件测试网4sa ?6R:h W1y-|
        例如, 'n' 匹配字符 'n'。'\n' 匹配换行符。序列 '\\' 匹配 "\",而 '\(' 则匹配             "("。51Testing软件测试网H nb2ik QJ ?
|        指明两项之间的一个选择。要匹配 |,请使用 \|。51Testing软件测试网+~.F$G8of8X:Ilr
.        匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。
?4L8xk(}3f;}051Testing软件测试网US-a Nt.e(E

e#o H.^Lz7v'e0D0非打印字符51Testing软件测试网f8k6u.^O+tN az
非打印字符                    描述51Testing软件测试网6Wu5[vU&jE
\f        匹配一个换页符。等价于 \x0c。51Testing软件测试网EIHWl E
\n        匹配一个换行符。等价于 \x0a。51Testing软件测试网@ ` Lf2S~
\r        匹配一个回车符。等价于 \x0d。
K(th*\)p/s"lm0\s        匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
#B?} n^:JU0f'{cE0\S        匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
,c&i*m1y-?Z0\t        匹配一个制表符。等价于 \x09。
EFhaY WXe `0\w      匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'字母或数字;相当于 [0-9A-Za-z]51Testing软件测试网DO$Eh-PX
\W       匹配任何非单词字符。等价于 '[^A-Za-z0-9_]'非字母,数字51Testing软件测试网)I^ S/Di~{5Z'kPC
\d        匹配一个数字字符。等价于 [0-9]。 [0-9]数字;相当于 [0-9]
;d+\B c*uvov0\D        匹配一个非数字字符。等价于 [^0-9]。非数字字符51Testing软件测试网0e5h-@+L lc6RKyf
\b        退格符 (0x08) (仅在范围描述符内部时)51Testing软件测试网]kl2FX0Z*N eD
51Testing软件测试网;y*c2iB1R

]Lo8G(p1LY0限定符:用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
.[&n kz;P051Testing软件测试网){@)z/V a(bX g
* 和 + 会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现最小匹配。
&Q7TX!Yo2]051Testing软件测试网,v3de0O a4pyq
限定符                        描述51Testing软件测试网4c3p$GAqO7Q,IS
*        前面元素出现0或多次。* 等价于{0,}。51Testing软件测试网F W!dlp|
         例如,zo* 能匹配 "z" 以及 "zoo"。51Testing软件测试网 dKgp9K
。        要匹配 * 字符,请使用 \*。51Testing软件测试网 Db vd'OX#F,I
+        前面元素出现1或多次。+ 等价于 {1,}。
A$H2Z,bvm0[Tg0        例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。51Testing软件测试网a Wx)Rp_EL L&Tr
        要匹配 + 字符,请使用 \+。51Testing软件测试网Z/GV Y1|NTO8hMQ9^
?        前面元素最多出现1次;相当于 {0,1}。
9h&KF5l/{4l1ZSVM E0        例如,”do(es)?” 可以匹配 “do” 或 “does” 中的"do" 。
I@&s*_,}p~9S0        要匹配 ? 字符,请使用 \?。
w-|5Tf#J0{n}      n 是一个非负整数。匹配确定的 n 次。51Testing软件测试网N,A8|Nv7B
        例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o。51Testing软件测试网u_T9L].Q1qY
{n,}     n 是一个非负整数。至少匹配n 次。'o{1,}' 等价于 'o+'。'o{0,}' 则等价于 'o*'。
Eq5R2^;{uX7} v0        例如,'o{2,}' 不能匹配 "Bob" 中的 'o',但能匹配 "foooood" 中的所有 o。51Testing软件测试网x.bfyHA3gDl
{n,m}   m 和 n 均为非负整数,其中n <= m。前面元素最少出现n次,最多出现m次。'o{0,1}' 等价于 'o?'。请注意在逗号和两个数之间不能有空格。
q/^n&EA/]9w8gK0        例如,"o{1,3}" 将匹配 "fooooood" 中的前三个 o。51Testing软件测试网;de``Da

r qpEc5?"U0
[0U"Q"p _.mUy051Testing软件测试网Pb#UvZP#qV y0fg
定位符 用来描述字符串或单词的边界, ^ 和 $ 分别指字符串的开始与结束,\b描述单词的前或后边界,\B表示非单词边界。不能对定位符使用限定符。51Testing软件测试网$T.PsG(LrM%d1A0O
定位符                        描述
#b/CT4`3V#P,m0^        匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。
pD/\ D*QSZnp0$        匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配'\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。
!q3N nqj6^/k l;G2u0\b        匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的'er',但不能匹配 "verb" 中的 'er'。51Testing软件测试网Kn)^ M D[ {
\B        匹配非单词边界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'
&l?Z-{;o0
f1X.V XLBH I[051Testing软件测试网^0dI[j9vG[
各种操作符的运算优先级
`(}2`GmT0相同优先级的从左到右进行运算,不同优先级的运算先高后低。各种操作符的优先级从高到低如下:
0?g+i4lkmR0优先级                操作符                描述
5CX7Mv2J(`mm0高                     \                   转义符
y7v6rjvO^}0                      (), []                 圆括号和方括号51Testing软件测试网fJ+RA3KA!H Z
               *, +, ?, {n}, {n,}, {n,m}        限定符51Testing软件测试网"z9K$Y$FB.y5D
                      ^, $,                 位置和顺序
PFm6Ct`$z3V0低                “或”操作  51Testing软件测试网3]!U`3ZzP}+JK

:N#^"UT|%m:px0

TAG: 其他

雪兔的个人空间 引用 删除 297322716   /   2011-12-09 17:29:29
RUBY,顶起。
 

评分:0

我来说两句

Open Toolbar