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 XdbZ/^/`;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:tNm i8Z7K
num*=1.051Testing软件测试网%]3s8c7Sk i8IlMy P
(num - rx*rx).abs <e ? rx : sqrt(num, (num/rx + rx)/2, e)51Testing软件测试网$PfC H(?
end51Testing软件测试网 Nj M9}%iR$s;yi
end
Fc9a s r:f"Y0
IQb8B V*tz0class 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 U1s b'_5{(kJ/n
end51Testing软件测试网UFlyy \%OO
s*VC H}!g2O-V0aStudent=Student.new51Testing软件测试网 V&_X3kDG
aStudent.talk # I'm talking.
v+VBw$q6X g~ {0puts aStudent.sqrt(20.7,3.3) # 4.54972526643248
Z%N]%KHF cO0
(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
&}jAXu+uG0 (num - rx*rx).abs <e ? rx : sqrt(num, (num/rx + rx)/2, e)
/Ob1|3|DSwI3u yC(x0 end51Testing软件测试网CB3AL+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包含文件,加载多次,即使是相同路径下同一文件。
^3xz~K r5YV_051Testing软件测试网&Y L,lzH$TKL!r
NB:51Testing软件测试网(I ^R_oR|k
1)require,load用于包含文件;include,extend则用于包含模块。51Testing软件测试网#d W"t9H-J
2)require加载文件一次,load加载文件多次。
D4M|OK;I!E W[03)require加载文件时可以不加后缀名,load加载文件时必须加后缀名。
Xp s8R,Bc04)require一般情况下用于加载库文件,而load用于加载配置文件。
Ni G"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*tsG0Ul5u9e ]B:z
puts arr[0] #351Testing软件测试网"jh]g?8e0p;}
puts arr.first #351Testing软件测试网on-_ats3Se.f
z.i? C;SH3t+Z0#下面四条代码都是读取最后一个数组元素值
$q Df6E9iav0puts 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-z2T1hjc4R0#倒数第二个元素的值51Testing软件测试网h/C lRX A d.}GJ}
puts arr[-2] #851Testing软件测试网3q\4k}B8\g
51Testing软件测试网g x]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
7GfQ5uqf051Testing软件测试网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#]
1Z Ukm^!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
$IL|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"__这里有点迷惑
w j7Hj2V0print arr.join(", "),"\n" #7, h, b, a, b, c, m
#R"o7d6Ve;n0一、模块(Module)的作用:51Testing软件测试网C|fN8X~@?
1.可以被其它程序代码重复使用;
c'p2o$W4oD02.提供了一个命名空间(namespace),防止命名冲突;51Testing软件测试网N5g;T"lL@G
3.实现了类似多重继承的功能;51Testing软件测试网6I&r XdbZ/^/`;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:tNm i8Z7K
num*=1.051Testing软件测试网%]3s8c7Sk i8IlMy P
(num - rx*rx).abs <e ? rx : sqrt(num, (num/rx + rx)/2, e)51Testing软件测试网$PfC H(?
end51Testing软件测试网 Nj M9}%iR$s;yi
end
Fc9a s r:f"Y0
IQb8B V*tz0class 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 U1s b'_5{(kJ/n
end51Testing软件测试网UFlyy \%OO
s*VC H}!g2O-V0aStudent=Student.new51Testing软件测试网 V&_X3kDG
aStudent.talk # I'm talking.
v+VBw$q6X g~ {0puts aStudent.sqrt(20.7,3.3) # 4.54972526643248
Z%N]%KHF cO0
(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
&}jAXu+uG0 (num - rx*rx).abs <e ? rx : sqrt(num, (num/rx + rx)/2, e)
/Ob1|3|DSwI3u yC(x0 end51Testing软件测试网CB3AL+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包含文件,加载多次,即使是相同路径下同一文件。
^3xz~K r5YV_051Testing软件测试网&Y L,lzH$TKL!r
NB:51Testing软件测试网(I ^R_oR|k
1)require,load用于包含文件;include,extend则用于包含模块。51Testing软件测试网#d W"t9H-J
2)require加载文件一次,load加载文件多次。
D4M|OK;I!E W[03)require加载文件时可以不加后缀名,load加载文件时必须加后缀名。
Xp s8R,Bc04)require一般情况下用于加载库文件,而load用于加载配置文件。
Ni G"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*tsG0Ul5u9e ]B:z
puts arr[0] #351Testing软件测试网"jh]g?8e0p;}
puts arr.first #351Testing软件测试网on-_ats3Se.f
z.i? C;SH3t+Z0#下面四条代码都是读取最后一个数组元素值
$q Df6E9iav0puts 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-z2T1hjc4R0#倒数第二个元素的值51Testing软件测试网h/C lRX A d.}GJ}
puts arr[-2] #851Testing软件测试网3q\4k}B8\g
51Testing软件测试网g x]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
7GfQ5uqf051Testing软件测试网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#]
1Z Ukm^!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
$IL|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"__这里有点迷惑
w j7Hj2V0print arr.join(", "),"\n" #7, h, b, a, b, c, m