首页 > 学院 > 开发设计 > 正文

ruby 一些简单的例子

2019-10-26 19:18:48
字体:
来源:转载
供稿:网友
现在我们将前面的一些示例程序的代码坼开来分析一下.

下面的例子出现在简单的例子一节.

def fact(n)  
    if n == 0    
       1  
    else    
       n * fact(n-1)  
    end
end
print fact(ARGV[0].to_i), "/n"  


因为是第一次解释,我们将逐行分析.

def fact(n) 


第一行,def 用于定义一个函数(或者,更准确地说,一个方法(method);我们会在稍后的一节中详细讨论什么是一个方法).这里,它指明 fact 函数带一个参数,也就是 n.

if n == 0 


if 用来检查一个条件.当条件吻合时,执行下面的代码;否则执行跟在else后的代码.

1  


当条件成立时if 的值为 1.

else 


如果条件不成立,执行从这里到end的代码.

n * fact(n-1) 


如果条件不满足, if的值会是n乘fact(n-1)的结果.

end 


第一个 end 与 if 语句对应.

end 


第二个 end 与 def 语句对应.

print fact(ARGV[0].to_i), "/n" 


这句用由命令行指定的值来调用fact()函数并打印结果.

ARGV是一个包含命令行参数的数组.ARGV的成员是字符串,所以我们必须通过to_i转化其为整数. Ruby并不像Perl那样自动将字符串转化为整数.

Hmmm...如果向程序赋一个负值作为参数会怎样?你看到这个问题了吗?你可以修复它吗?

Strings

下面我们来检查在字符串这章中出现的猜谜程序.由于这个要长一点,我们为每一行打上行数.

01 words = ['foobar', 'baz', 'quux']
02 secret = words[rand(3)]
03
04 print "guess? "
05 while guess = STDIN.gets
06   guess.chop!
07   if guess == secret
08     print "you win/n"
09     break
10   else
11     print "you lose./n"
12   end
13   print "guess? "
14 end
15 print "the word is ", secret, "./n" 


这个程序里,我们使用了一个新的控制结构 while.只要某个指定的条件保持为真,while和它对应的end之间的代码会重复执行.

行2的rand(3)返回一个介于0-2之间的随机数.这个随机数用于提取数组 words 中的一个成员.

在行5我们通过STDIN.gets方法从标准输入读取一行.如果读行遇到时 EOF (文件结束), gets会返回nil.因此,与while相连的代码会一直执行直到它遇到^D(或DOS下的^Z),表示输入的结束.
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表