不要追求绝对的公平,红尘之中没有公平而言,人活一世,难得糊涂。                                           it is no use doing what you like, you have got to like what you do.

通过例子学ruby

上一篇 / 下一篇  2009-08-26 09:26:51 / 个人分类:ruby_watir

查看( 744 ) / 评论( 25 )
每日随笔
  • 每日随笔:
以下都是从国外网站翻译过来,自己学习的时候总结了一下,希望对大家学习ruby有所帮助。
&q0P GZ ]5C'l01. Problem: “Display series of numbers (1,2,3,4, 5….etc) in an infinite loop. The program should quit if someone hits a specific key (Say ESCAPE key).”51Testing软件测试网v5t eS{u-m {
解决方案
Mq%E)G9vI/D0
s"]`q.f:[+V0   1. i = 0   
0~U6}1a1D2c0   2. loop { print "#{i+=1}, " }   
v!{4?9I E6`Rf}%C]051Testing软件测试网q$`5h%{Z|)Fn1`
     虽然是一个很简单的问题,但我想着想着却觉得这个问题很有意思,原文中也没有给出很完美的答案,不知道谁有好的解决方法。51Testing软件测试网Q_-?#Yo

Y*]}_i6c02. Problem: “Fibonacci series, swapping two variables, finding maximum/minimum among a list of numbers.”
-~r:X"}r2Jc ~6Z |Y0解决方案
+mr/T/V&zb c0
ns)mF&TV2k:K:b ]0   1. #Fibonacci series   51Testing软件测试网'f#uj*ZC
   2. Fib = Hash.new{ |h, n| n < 2 ? h[n] = n : h[n] = h[n - 1] + h[n - 2] }   
j ej:x&DO qb'w0   3. puts Fib[50]   
#@5g6dw$@Q0   4.     51Testing软件测试网?)nG,^~
   5. #Swapping two variables   51Testing软件测试网(sQ j8@KA9U}c_
   6. x,y = y,x   
!\a)k|0M W!nu0   7.     51Testing软件测试网lI{j m+s
   8. #Finding maximum/minimum among a list of numbers   
)m;pAeTP;_0   9. puts [1,2,3,4,5,6].max   51Testing软件测试网 ~l;hc0H
  10. puts [7,8,9,10,11].min   51Testing软件测试网!T-y9_lP

XC"d"D.L#E p,U0
KQ6J2Mfp0
1d\9I)U2`_)ny!H0语法知识:51Testing软件测试网IJ?9e5zM k

.R/X-Lk#}@/]01.Hash。Hash在实例话的时候可以在new里边接受一个参数值,或者一个模块,它实际上不是hash对象的一个值,仅当在hash操作的时候找不到这个值对应的项的时候返回。51Testing软件测试网 T HS1ML{n"W/s

2h~ dL aT02.交换两个变量。51Testing软件测试网6?)e*C Q,XP'g
51Testing软件测试网K\q^!e5i&_;[
3.查询数组里最大最小的值,有专门的API。51Testing软件测试网c8p3sqB K$zt"D
51Testing软件测试网nd(^$C.HMzw d
3. Problem: “Accepting series of numbers, strings from keyboard and sorting them ascending, descending order.”
\m;P,ml"?L051Testing软件测试网+xC[;y#KGD
解决方案
)| hrg n1y+@051Testing软件测试网:aeu5G[MuP
   1. a = []   
]^,{7OE:q&g0   2. loop { break if (c = gets.chomp) == ‘q’; a << c }   51Testing软件测试网T Su~,xy1Z:f:a
   3. p a.sort   51Testing软件测试网` o1|5vc:H"N
   4. p a.sort { |a,b| b<=>a }   
V*w2Z };` c8n_m0
4L$bDs%X!J.Fo0
+C?$Hu a[}s0
"s i~*t PXy e(H*u0语法:
7k Q%v ^)G ? }'G._3d} IA051Testing软件测试网|9YR8tY(\C&d%KY(g.U8I
   1. loop循环,及break的应用
+Ouh%]Jss0   2. 从键盘读入字符 gets.chomp
7G QIA ]h7Car0   3. 将一项插入到数组 a << c51Testing软件测试网5GV9Dg QE b&zV
   4. 对于数组的正序和倒序的排序。
f&QffF&gG+K7R[b0
w"T(R-@Eu'o1EGj8eU0
:|0b!^Iy;TJkX0
TJ!bWY#L^ ib04. Problem: “Reynolds number is calculated using formula (D*v*rho)/mu Where D = Diameter, V= velocity, rho = density mu = viscosity Write a program that will accept all values in appropriate units (Don’t worry about unit conversion) If number is < 2100, display Laminar flow, If it’s between 2100 and 4000 display 'Transient flow' and if more than '4000', display 'Turbulent Flow' (If, else, then...)"
!UJ L D6TeN0ruby 代码51Testing软件测试网"n;i A,_.J9SD&I
51Testing软件测试网a a%He.\#p
   1. vars = %w{D V Rho Mu}   
7e2a GP"@ f0   2.     
3v'[ J3C;Z%ON0   3. vars.each do |var|   51Testing软件测试网u2PQ-zneCAT;ll)vq P
   4.   print "#{var} = "  51Testing软件测试网ROt fjZd
   5.   val = gets   
/]$_0s.E$jZ8k0   6.   eval("#{var}=#{val.chomp}")   
\haed4q ?0   7. end  
b#{F4q l0   8.     
`to+QEU!KG9F0   9. reynolds = (D*V*Rho)/Mu.to_f   51Testing软件测试网6R#H+}&ZmpW x?
  10.     
e alE&L&Dz0  11. if (reynolds < 2100)   
,T] |am:`0  12.   puts "Laminar Flow"  51Testing软件测试网b HC%i(dN pn
  13. elsif (reynolds > 4000)   
1Z8B.V.y WbW0  14.   puts "Turbulent Flow"  
~be@5u+i IE#m2x[X0  15. else  
~3\:Ei9{]1@0  16.   puts "Transient Flow"  
:Z~)K0G ~AWJS0  17. end  
&r-W Z#`ry$?#I051Testing软件测试网)fvU'i&`3VD
语法:51Testing软件测试网DK,~Lj4d
51Testing软件测试网}#A#skrk*~A \'e(v
没有搞清楚vars = %w{D V Rho Mu}  这一句是什么意思。
r U){-U ag051Testing软件测试网z!Sq"|J,J,O'S
5. Problem: “Modify the above program such that it will ask for ‘Do you want to calculate again (y/n), if you say ‘y’, it’ll again ask the parameters. If ‘n’, it’ll exit. (Do while loop) While running the program give value mu = 0. See what happens. Does it give ‘DIVIDE BY ZERO’ error? Does it give ‘Segmentation fault..core dump?’. How to handle this situation. Is there something built in the language itself? (Exception Handling)”51Testing软件测试网s m P E)|t
ruby 代码
L8Le9c7c.k4l0
b J"^*`&Tu d!m0   1. vars = { "d" => nil, "v" => nil, "rho" => nil, "mu" => nil }   
3^,S@x(`0   2.     
t'vz'A Uw^e;Qc0   3. begin  51Testing软件测试网F'Md:o.[K:y
   4.   vars.keys.each do |var|   51Testing软件测试网9]5gm]o,w4Q
   5.     print "#{var} = "  
Fs/Y"G(KIX0   6.     val = gets   51Testing软件测试网*w\zsZ k,E
   7.     vars[var] = val.chomp.to_i   51Testing软件测试网"_ \(U;V)pz
   8.   end  51Testing软件测试网Ap$EG}I
   9.     
f(Z dyBDO m0  10.   reynolds = (vars["d"]*vars["v"]*vars["rho"]) / vars["mu"].to_f   51Testing软件测试网TKcb(]$v
  11.   puts reynolds   
z s vlz_0  12.     
)r$`Viz [0  13.   if (reynolds < 2100)   51Testing软件测试网TCrhb
  14.     puts "Laminar Flow"  
M GDnH1|(u0  15.   elsif (reynolds > 4000)   51Testing软件测试网.Q[0`k.l
  16.     puts "Turbulent Flow"  51Testing软件测试网 _U0_.n},m+JI
  17.   else  
%@Uu0Tciar0  18.     puts "Transient Flow"  
}:t?W_r0  19.   end  
%z+\`E]I0  20.     51Testing软件测试网^ P8f kA
  21.   print "Do you want to calculate again (y/n)? "  
d.Co v)k,]0  22. end while gets.chomp != "n"   
DR3N7kwG%E r051Testing软件测试网:f!faTg Cp

bF#U4o0~051Testing软件测试网+u"`!r0\Uo]e1ENn
6.一个计算器的问题,代码太多。51Testing软件测试网C4F?lr L[m

M&V#jSU7OJ"fH07. Problem: “Printing output in different formats (say rounding up to 5 decimal places, truncating after 4 decimal places, padding zeros to the right and left, right and left justification)(Input output operations)”
7g)t v5f} n?0ruby 代码
;L!i$_j3]-I A0
LJ9l@|ToMm0   1. #rounding up to 5 decimal pleaces   51Testing软件测试网M0yg$Vbbju H
   2. puts sprintf("%.5f", 124.567896)   51Testing软件测试网._9a$IC,n A/f
   3.     51Testing软件测试网.X$Guw(~;Rdv:K+N
   4. #truncating after 4 decimal places   51Testing软件测试网"Acu3]$q
   5. def truncate(number, places)   
z.XDu*sUn9m%`0   6.   (number * (10 ** places)).floor / (10 ** places).to_f   
_d }1U'G Y0   7. end  51Testing软件测试网8T&QM^2uK {
   8.     
c3f N,X*gQQ7Y0   9. puts truncate(124.56789, 4)   
/{}1e9Lj0  10.     
JzHn }*p o ]oq0  11. #padding zeroes to the left   51Testing软件测试网f-aEJ[3B-Q,\$Y4rZ
  12. puts ‘hello’.rjust(10,’0‘)   51Testing软件测试网 A-C8S\&f+ac0B/[v
  13.     51Testing软件测试网E_Zd M HtY@@*E
  14. #padding zeroes to the right   
5p;I;W$W RT8h0  15. puts ‘hello’.ljust(10,’0‘)   51Testing软件测试网3R7l4Y6Hy1? t(l&\y
  16.     
P`g d4F&m-{0  17.   
$@ L ^Yo x0
CkHegq5t&[s6[0语法:
,B,zwr+U8l&X051Testing软件测试网[se p9G*f FsS
51Testing软件测试网y?k2`!L

p ]2s_B q(Q'Od0
&} bI0^ oA?J051Testing软件测试网/D8q7ou~ i-\kF5~0c
   1. 格式化sprintf。
1p9\7b$T2?Jelh(rT0   2. 左填充和右填充
%J:nf8^1c8| zuL$H0
el ~Q F0  8. Problem: “Open a text file and convert it into HTML file. (File operations/Strings)”
M'HS8Kr+J051Testing软件测试网_S*jt%R
这段代码比较长,其中有些东西还是不太理解,还要看看正则表达式,谁能告诉我下边的代码是怎么执行的吗:51Testing软件测试网8R4y5qpH:C;[ G4j_

H;v!E2o]M&L^?v0   1. rules = {‘*something*’ => ‘something’,      
D)q^5k b w qCZ p3eB;p0   2.          ’/something/’ => ‘something’}      51Testing软件测试网rB/Mf;?4^2OI#C%f
   3.        51Testing软件测试网/Ug.f,B/I6W
   4. rules.each do |k,v|      51Testing软件测试网CF`Eu4F*D
   5.   re = Regexp.escape(k).sub(/something/) {"(.+?)"}      
A\H*KQ$x3J \0   6.   doc.gsub!(Regexp.new(re)) do     51Testing软件测试网 a ?w u!n P*U
   7.     content = $1     
_nm(H)is0   8.     v.sub(/something/) { content }      
2B+?._1Iq)`0   9.   end     51Testing软件测试网x"pj6x8iq
  10. end   
'l.L`:mN0
gPd b1Zg09. Problem: “Time and Date : Get system time and convert it in different formats ‘DD-MON-YYYY’, ‘mm-dd-yyyy’, ‘dd/mm/yy’ etc.”51Testing软件测试网)bF'L#?.H*D j
ruby 代码51Testing软件测试网E5pOW G
51Testing软件测试网4Y%F)PoPz
   1. time = Time.now   
y!e2YS q+lBy]0   2. puts time.strftime("%d-%b-%Y")   
(JaMnv3\gVW*V"F0   3. puts time.strftime("%m-%d-%Y")   51Testing软件测试网x x*o/u&\c{ x^R`
   4. puts time.strftime("%d/%m/%Y")   
S#|9O&U sU8BI\0
e9rE,~ K0a010. Problem: “Create files with date and time stamp appended to the name”
u7K:{/x&_ XD0ruby 代码
7l k2w*dMl0
n ~7cu&|adK:Q0   1. #Create files with date and time stamp appended to the name   
zJg,mkL0   2. require 'date'   
UprK~0   3.     51Testing软件测试网 l)j;j1LG.Ln
   4. def file_with_timestamp(name)   51Testing软件测试网hg}@/m6xe Up
   5.   t = Time.now   51Testing软件测试网 n1Q%s @O
   6.   open("#{name}-#{t.strftime('%m.%d')}-#{t.strftime('%H.%M')}", 'w')   51Testing软件测试网 c g#V9MjKX.dn
   7. end  
3W*KUJZ5g+I0   8.     
"F'B:`d"K @C2@i0   9. my_file = file_with_timestamp('pp.txt')   51Testing软件测试网"^+E+f rE
  10. my_file.write('This is a test!')   
T3ne)W&yG.YQ0  11. my_file.close   
)X$V6L-_,iCj%A9o051Testing软件测试网5[J n:XFv
51Testing软件测试网+X.Apu:t3DY"I

:w{4pA%r.Z0a011. Problem: “Input is HTML table. Remove all tags and put data in a comma/tab separated file.”
e["Nx3\P0
`r ^1G~c4C.LnrE012. Problem: “Extract uppercase words from a file, extract unique words.”
.G8lEL*Ua051Testing软件测试网5sR3dj8{T(~
   1. open('some_uppercase_words.txt').read.split().each { |word| puts word if word =~ /^[A-Z]+$/ }   
Tzz6Lkp0   2.     
/jd&r y*`?8g0   3. words = open(some_repeating_words.txt).read.split()   51Testing软件测试网u`'J Y'UNv
   4. histogram = words.inject(Hash.new(0)) { |hash, x| hash[x] += 1; hash}   51Testing软件测试网Lf(PQW0N,U
   5. histogram.each { |k,v| puts k if v == 1 }  51Testing软件测试网/K|$h L FM%s9b(R8g

@_7{~7ITr0语法:(对于第四行还是不太懂,谁能给我讲一下呢)51Testing软件测试网8x&EA2m\5?5d ]z
51Testing软件测试网%a}M-J:je)}` Gx ?
1.打开文件,读取文件,split(),正则表达式匹配。51Testing软件测试网5J]?OU5Q ?;w

H%_0s(pP-j \ a1x013. Problem: “Implement word wrapping feature (Observe how word wrap works in windows ‘notepad’).”51Testing软件测试网*Q3D q*P9E
ruby 代码
$xq'KI%@f_L0J051Testing软件测试网p,hlx ~~"Fw;P
   1. input = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."  51Testing软件测试网.p&^^q)gku!M
   2.   51Testing软件测试网mV$sI1zD:S r8~X
   3.   51Testing软件测试网6b!GC~9I2D
   4. def wrap(s, len)   51Testing软件测试网Lq!h$m P3l"\'X
   5.   result = ''  
4fa p!{5l!i0Q0   6.   line_length = 0   51Testing软件测试网Hd d9j;F8h
   7.   s.split.each do |word|   
/WdO sk^,m0   8.     if line_length + word.length + 1  < len   
7]/_a1~.]n0   9.       line_length += word.length + 1   51Testing软件测试网3o\-SS;cL:W
  10.       result += (word + ' ')   
{'N'{b[,hUt0  11.     else  51Testing软件测试网 hM)] r M3e
  12.       result += "\n"  
)y X5])_;h0  13.       line_length = 0   
p4E,|;S] c T|(?r0  14.     end  51Testing软件测试网 @;t@eyqL,c$R^
  15.   end  
4Zd}Ic5wc0{0  16.   result   
`m!jj8a1`yg3T a0  17. end  
m.o#Wryl;EsV0  18.     51Testing软件测试网?ZhS6}-|&~
  19. puts wrap(input, 30)   51Testing软件测试网7P.M)`yq
51Testing软件测试网g!\OF8H"xy
51Testing软件测试网4h%J8jzN[.SY

5NNuD6@/f zOb6i |014. Problem: “Adding/removing items in the beginning, middle and end of the array.”
"_q5F&nl`}k0ruby 代码
"pM5ru q g#E!O _0
5j8X&z fDN;dJ0   1. x = [1,3]   
(i'C:I8P q'S Y6[Q-o0   2.     
"[-w5ZS]b/Z0   3. #adding to beginning   51Testing软件测试网0u0INcP u'Kf
   4. x.unshift(0)   51Testing软件测试网al kp9J5}u5q#s
   5. print x   51Testing软件测试网 FD m$R`3@;j^
   6. print "\n"  
I2sp rp3C[0   7.     51Testing软件测试网j7RL^m.i/u
   8. #adding to the end   
0uhV9qf0   9. x << 4   
&J!w,xq&VF2^0  10. print x   
)}k,W!H-A;S0  11. print "\n"  
6IV^6K0F}6wI0  12. #adding to the middle   
(C'A K"B7_,XF4Q0  13. x.insert(2,2)   51Testing软件测试网-XR"i+d VVsx
  14. print x   
/r%mI2~.LK?0  15. print "\n"  51Testing软件测试网rS#ur`S;L
  16. #removing from the beginning   51Testing软件测试网.nN-g!m8l Yt
  17. x.shift   
Dx \&j^$n6i0  18. print x   
'fxsy*Z0y x0  19. print "\n"  51Testing软件测试网'Nx"M"n$Bp0|8`1K
  20. #removing from the end   51Testing软件测试网4Vwpx7m*T b
  21. x.pop   51Testing软件测试网 rp@[UMa F
  22. print x   
b'o;B7W g0  23. print "\n"  51Testing软件测试网)W7BkX d e
  24. #removing from the middle   51Testing软件测试网f#@8Zn[5V
  25. x.delete(2)   51Testing软件测试网frX:[]G ^ro
  26. print x   51Testing软件测试网$_7L+R.W{'H {P%t[
  27. print "\n  51Testing软件测试网%WN$}3\l@;a:E/k

.}/e\&THF0
6}O0[? m#Bj1g051Testing软件测试网7A/`)@&Ar
15. Problem: “Are these features supported by your language: Operator overloading, virtual functions, references, pointers etc.”51Testing软件测试网3WT ^#t-Bu.v
51Testing软件测试网Y-q5j^#E|n9ov
Solution: Well this is not a real problem (not in Ruby, at least). Ruby is a very high level language ant these things are a must.

TAG:

peterz的个人空间 peterz 发布于2009-08-21 17:35:52
不错。分量非常的足
nbkhic的个人空间 nbkhic 发布于2009-08-24 12:35:28
花了2个星期研究了ruby,有如下感觉,跟大家分享一下:中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务.EL6sl k0x+cx
1.watir非常容易上手,从某种程度上说,watir比QTP都容易上手一些..www.51testing.comR8U8|!n ?!G1x!e4C
2.ruby语言对我来说非常难以学习,其中的迭代器和闭包经常让人迷失;www.51testing.com4b-Tq
F m7C$rr

3.学好watir并不难,其源代码只有4000多行,各种方法也不是特别多,比较容易掌握;
{ q.m/Z"qZ3a中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务4.ruby让我很迷茫,相当多的语法糖衣,比如%w{},%Q{},$,$;之类的,另外ruby中我现在都弄不明白的是include和reqire的区别...很头疼;www.51testing.com5S`C9?&c8B
5.学过java的兄弟可能对于ruby的面向对象特性颇有微词,尽管说ruby中一切都是对象,但是ruby定义类的方式跟一般的面向对象语言是很不一样的...@var和@@var经常会让人烦迷糊;软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具$D;MN8Y8?)y4`
6.如果仅仅是写watir脚本而不需要搭建基于watir和rails的测试框架的话,学习一点点ruby的基本语法就OK了,但是若要深入,ruby确实是一门很诡异的语言,跟C++都有得一拼...ruby中的概念非常容易混淆...当然了,可能是我天赋不够的原因...
子木清风 Spark.lee 发布于2009-08-24 14:25:19
回复 3# 的帖子
include和reqire的区别
f2GUw7HxVG7w7twww.51testing.com
DOI4eiy%D#t
a.h软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具
应该还有个load 中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务 Rq'K p7q,hN\;z K

        nCD M)I{8gV51Testing软件测试网一般来说:软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具/xzS+d;CR'|
require 这个东西加载 只加载一次  
(G
cb!l/{
~软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具
include这个就直接放到脚本中软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具_(U9J4B Q
load一般加载会叠加 一般在程序中不使用 只是 在irb中使用中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务|I3T7A#D-N:\_
中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务:L8[&Ve;s Q-b1d ~tt
一般使用include会出现意外错误  
/XF;X2u4Y7O,ol3f|"iwww.51testing.comwww.51testing.comvC7toyd
XO

具体的分别你可以看见:http://wiki.openqa.org/display/WTR/include+Watir
nbkhic的个人空间 nbkhic 发布于2009-08-24 15:25:02
确实如此,对require,include理解不深刻是因为我没有仔细理解ruby帮助文档中。
)Y2KhY~P(nU        `|软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具刚才又看了下,发现这两个方法作用如下:软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具*`.W)U1Bo
m.fe

require:加载参数文件以及引用到的类库;通过require的方法,用户可以调用所引用module中的模块级方法。示例代码如下:
}_7B-~/K.S)]rywww.51testing.commodule Trig51Testing软件测试网Ch}k'K
  PI = 3.141592654软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具IP4t*qz1c o6_
  def Trig.sin(x)
!Wb$r        St&Cy1f软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具   # ..中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务N"\-p7?/iW
  end51Testing软件测试网JJ        ]0['R Y
Lnlm7K

  def Trig.cos(x)
'x.ge)` twww.51testing.com   # ..软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具zFik,fgV
  end
6CC-H?g_ZFend51Testing软件测试网
qlR+v;u b4k a2o


LA
O)Ww+_|中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务
module Action软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具W'aLoK1|m&PT
  VERY_BAD = 0
+i6LXO)X0CR        e  BAD      = 1
|B.Y9X`'t8r'D}中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务  def Action.sin(badness)51Testing软件测试网I'Z        XI$QRC
    # ...
E#O-n }0kM        N%[)z软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具  end0I(E*p)A?o
end
q}^l]        ^51Testing软件测试网###############################51Testing软件测试网,O/TD@
B}

require "trig"
L$M|#A%Ql A5m软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具require "action"
*?1s
f(_
T软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具

c
f1} v,IoJ7\!G@
y = Trig.sin(Trig:I/4)
\b Q&h[Nwww.51testing.comwrongdoing = Action.sin(Action::VERY_BAD)
vZ([gW C)t J!N中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务###################################
4W7a z{~ bP这时候require的调用者可以使用的是moudule方法,也就是以moudule名或self为前缀定义的方法;若是引用moudule常量的话,则需要使用“::”操作符;
vYb$\#_:[Hl/I软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具##########################################无奈的分隔线##################www.51testing.com"P
d!x-N/`
{%AA

include则不同,其作用是糅合。将module中的非moudule方法(也就是java中的非静态方法)糅合到引用其的class中。示例代码如下:
&UI-} j$TDe软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具module Debug  软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具j?%u)KB5F
  def whoAmI?  
1M        g6I1y5L\www.51testing.com    "#{self.type.name} (\##{self.id}): #{self.to_s}"  
9^n        m5X2[Jl[2gi  end  
Y1K4j3h"`www.51testing.comend  
5Jf ~jPVI*F中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务class Phonograph  
nE4[8E"b]4`-F中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务  include Debug  51Testing软件测试网$y ih*oh
kL%H

  # ...  
!MZ@e2y7QGwww.51testing.comend  中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务Y?ygZ
class EightTrack  中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务s[X+aJ5m        _7K
  include Debug  
+w~(ebRX ?软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具  # ...  51Testing软件测试网,Cn        z$ZE&r:f5\
end  软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具1@y#rt-A L
ph = Phonograph.new("West End Blues")  www.51testing.comFk3S2G7s*{Zb
et = EightTrack.new("Surrealistic Pillow")  5OAr~7O'~
#################################结果如下#####################51Testing软件测试网.ou itT*B
~{;o

ph.whoAmI?  » "honograph (#537762134): West End Blues"  
}:xFy9p'A)S/{J\中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务et.whoAmI?  » "EightTrack (#537761824): Surrealistic Pillow"  
4ak[VUC%lwww.51testing.com我们看帮助文档中的原话中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务u/rL4Vq@
IH}%c

A couple of points about the include statement before we go on. First, it has nothing to do with files. C programmers use a preprocessor directive called #include to insert the contents of one file into another during compilation. The Ruby include statement simply makes a reference to a named module. If that module is in a separate file, you must use require to drag that file in before using include. Second, a Ruby include does not simply copy the module's instance methods into the class. Instead, it makes a reference from the class to the included module. If multiple classes include that module, they'll all point to the same thing. If you change the definition of a method within a module, even while your program is running, all classes that include that module will exhibit the new behavior.[Of course, we're speaking only of methods here. Instance variables are always per-object, for example.] 软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具@&S0]2b!O|5o
也就是说inculde建立了moudule中方法的引用,引用其的类和对象就会获得module中的任何方法...
&U/u:qIy中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务没办法,ruby不太好理解,所以我的上述说明可能会很绕....
I        Kq~$V%e软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具*MTe} T;Q
最后再次谢谢斑竹的提示。关于require和include还有很多概念,下次专门写出来分享:)
风车发布于2009-09-07 12:43:58
好难。。。
wokaotesting buutterfly 发布于2009-10-10 18:34:32
菜鸟学习了
ai,生活 同同爱学习 发布于2009-11-20 11:24:29
学习了
yetties2005的个人空间 yetties2005 发布于2010-01-05 10:18:20
我也学习了~
sail-j的个人空间 sail-j 发布于2010-04-01 16:27:55
赞一个

dog487发布于2010-04-06 09:19:45
来学习了~
Key4钥匙 key4 发布于2010-05-07 21:42:11
学习呀,我最近也在看这个
e1king发布于2010-05-12 15:45:26

QUOTE:

原帖由 Spark.lee 于 2009-8-20 17:06 发表 软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具I+VC$R]&y*G'M
v

以下都是从国外网站翻译过来,自己学习的时候总结了一下,希望对大家学习ruby有所帮助。
,Y5@9?1{
Bz51Testing软件测试网
1. Problem: “Display series of numbers (1,2,3,4, 5….etc) in an infinite loop. The program should quit if someone h ...
.K3[u5x6@Y.P(owww.51testing.comvars = %w{D V Rho Mu}  这一句是什么意思软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具!t"ze[5`)Lf        z        ^
TO 楼主
[q{H m1a?q这句话的意思是vars={"D","V","Rho","Mu"}
SSS_51发布于2010-05-21 15:14:12
学到东西了,一直在思考模块化的问题
我用了最笨的load  学到东西了
风清杨的个人空间 yang 发布于2010-06-25 14:31:11
学习学习。。。。。。
测试小兵 敦促自己努力 peag 发布于2010-07-28 09:12:28
先记着
tings发布于2010-09-04 14:47:45
[i=s] 本帖最后由 tings 于 2010-12-1 10:56 编辑 !R-l:L$P0e a"J&e
}+O

软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具i;S\ TdQz
看不懂,太复杂了。
1bv:g~
Y9E'_
www.51testing.com        R?*tNUD

6b)ZcJ
s/^.m3s中国软件测试人的精神家园,介绍先进的软件测试工具、 软件测试流程和软件测试思想,定期举办软件测试沙龙,软件测试精品 资料下载,提供专业的软件测试培训服务
51Testing软件测试网(Y.FRMe
51Testing软件测试网B5~        tM_4\ W3g
软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具~:J8GH
@


4}+l9F_
It51Testing软件测试网
软件测试,软件测试论坛,软件测试方法,软件测试工具,软件测试流程,软件测试培训,软件测试外包,软件质量管理 ,软件缺陷跟踪,软件配置工具'H3zD-h/Y!s

*n'dojs!bg0C8p:qt51Testing软件测试网——————————————————————软件测试 - 软件测试论坛 - 软件缺陷跟踪 - 软件配置工具 - 测试用例设计 - Web测试 -  自动化测试工具
s:E8r*yG"xp

my friends have recently started cheap wow gold.
孙为礼的测试Blog swlcom 发布于2010-09-28 09:57:40
复杂
qlyejtxy发布于2010-10-05 02:53:02
终于找到 了
@槽神刘叫兽 lyscser 发布于2010-10-10 11:23:39
Ruby在书写和可读性上太抽象了,完全不适合我这种没有逻辑头脑的人……身之不能,心向往之……
良情泽木的个人空间 houzeal 发布于2010-11-17 23:42:52
不错。。 学习 学习!!
我来说两句

(可选)

Open Toolbar