ruby 简单例子_ruby专题

让我们写一个计算阶乘的函数.对于阶乘的数学定义如下:

n! = 1               (当 n==0 时)   
= n * (n-1)!       (其它情况)

在Ruby里,可以这样来写:

复制代码 代码如下:

def fact(n) 
        if n == 0 
          1 
        else 
          n * fact(n-1)   
        end 
      end  

你可能会发现 end 的反复出现,正因为如此,Ruby被叫做"类Algol"语言.(实际上,Ruby的语法更像Eiffel).同时,你也可能会发现这段函数缺少return语句.在这里是可以用return的,但却不是必须的,因为一个Ruby的函数会自动返回它所最后赋值的元素.

让我们来试试我们的阶乘函数.加入一行代码会使它成为一个可工作的程序:

复制代码 代码如下:

# Program to find the factorial of a number 
# Save this as fact.rb 
def fact(n)   
   if n == 0     
     1   
   else     
     n * fact(n-1)   
   end 
end 

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

这里,ARGV是一个包含命令行参数的数组,to_i将字符串转化为整数.

% ruby fact.rb 1
1
% ruby fact.rb 5
120  

当参数为40时它可以工作吗?它将使你的计算器产生溢出(overflow)...

% ruby fact.rb 40
815915283247897734345611269596115894272000000000 

它确实算出来了.实际上,Ruby能处理任何你机器的内存所允许的整数.实际上400!也可以:

% ruby fact.rb 400
64034522846623895262347970319503005850702583026002959458684
44594280239716918683143627847864746326467629435057503585681
08482981628835174352289619886468029979373416541508381624264
61942352307046244325015114448670890662773914918117331955996
44070954967134529047702032243491121079759328079510154537266
72516278778900093497637657103263503315339653498683868313393
52024373788157786791506311858702618270169819740062983025308
59129834616227230455833952075961150530223608681043329725519
48526744322324386699484224042325998055516106359423769613992
31917134063858996537970147827206606320217379472010321356624
61380907794230459736069956759583609615871512991382228657857
95493616176544804532220078258184008484364155912294542753848
03558374518022675900061399560145595206127211192918105032491
00800000000000000000000000000000000000000000000000000000000
0000000000000000000000000000000000000000000 

我们不能一眼看出是否算对了,但我想应该是对的吧. :-)

输入/求值循环

当你不带参数启动Ruby的时候,Ruby会从标准输入读入命令并在输入结束后再执行:

% ruby
print "hello world\n"
print "good-bye world\n"
^D
hello world
good-bye world 

Ruby还包含了一个名为eval.rb的程序,它可以令到你在一个交互式的循环中输入Ruby代码并随之显示结果.在后面的教程里将广泛使用这个程序.

如果你有一个ANSI兼容(ANSI-compliant)的终端(如果你正运行着一个UNIX变种,一般都是的);在DOS下,你需要安装ANSI.SYS和ANSI.COM;然后就可以使用这个支持可视化缩排,警告提示,彩色高亮度显示的增强eval.rb了.不行的话,试试Ruby发行版里sample目录下的那个非ANSI版本,它可以运行于所有的控制台.这是一个简短的eval.rb对话:

% ruby eval.rb
ruby> print "Hello, world.\n"
Hello, world.
   nil
ruby> exit 

hello world 由 print 打印出来.下一行 nil 报告最后计算出来的值;Ruby并不区分语法和表达式,因此计算一段代码从根本上说和执行它是一回事.在这里,nil的意思是print并未返回一个有意义的值.注意:可以用exit或^D离开这个循环的解释器.

在整个教程里,'ruby>'表示我们这个非常有用却很小的eval.rb程序的命令提示符.

时间: 2024-10-14 09:33:17

ruby 简单例子_ruby专题的相关文章

ruby 一些简单的例子_ruby专题

现在我们将前面的一些示例程序的代码坼开来分析一下. 下面的例子出现在简单的例子一节. 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);我们会在稍后的一

优化Ruby代码使程序运行速度提高的例子_ruby专题

这篇文章主要介绍了我是如何把ruby gem contracts.ruby速度提升10倍的. contracts.ruby在我项目里用来添加代码合约(code contracts)到Ruby中.看起来差不多是这样的: Contract Num, Num => Num def add(a, b) a + b end 只要add方法被调用,参数和返回值都会被检查. 20秒 本周末,我对该库进行了测试,发现其性能非常糟: 这是在随机输入下,运行1000次以后的结果. 所以,当给一个函数加入合约功能后,

Ruby中的Socket编程简单入门_ruby专题

 Ruby提供了两个访问级别的网络服务.在一个较低的水平,可以访问底层的操作系统,它可以实现面向连接和无连接协议的客户端和服务器支持基本的socket. Ruby也具有程序库,提供更高级别的访问特定的应用程序级的网络协议,如FTP,HTTP等. 这篇教程介绍 Ruby Socket编程概念及讲解一个简单的实例. 什么是Sockets? 套接字是一个双向通信信道的端点.socket能在一个进程,进程在同一台机器之间,或在不同的机器上的进程之间的进行通信. 套接字可实施过许多不同类型的通道:Unix

ruby开发的交互式程序例子_ruby专题

实现pry,ronin,msf类似的终端下交互功能,这里主要用到了ripl gem: 1.能够调用定义的方法,如help 2.能够执行系统命令 3.能够类似irb/pry进行ruby语言解析 安装: gem install ripl gem install ripl-shell_commands 示例 ripl这个gem,它也提供很多插件,如下是一个简单的终端下交互实现: require 'ripl' require 'ripl/shell_commands' require 'ripl/col

在Ruby中处理XML和XSLT以及XPath的简单教程_ruby专题

什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种用于标记电子文件使其具有结构性的标记语言. 它可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言. 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据. XML解析器结构和API XML的解析器主要有DOM和SAX两种.     SAX解析器是基于事件处理的,需要从头到尾把XML文档扫描一遍

使用Ruby编写发送邮件的程序的简单教程_ruby专题

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. Ruby提供了 Net::SMTP 来发送邮件,并提供了两个方法 new 和 start:     new 方法有两个参数:         server name 默认为 localhost         port number 默认为 25     start 方法有以下参数:         server - SMTP 服务器

Ruby on Rails网站项目构建简单指南_ruby专题

创建 Rails 项目 创建一个普通的 Rails 项目,可以直接使用以下命令: rails new blog 但在国内因为连接 RubyGems 的速度太慢,而 Rails 默认在构建完项目结构后,会使用 bundle 命令从 RubyGems 下载安装依赖包.最后会因为网络问题而卡死.所以需要使用 --skip-bundle 参数跳过执行 bundle 这一步.然后使用国内的 Gems 镜像源来完成后面依赖包的安装.国内推荐的源是 Ruby China 提供的: https://gems.r

冒泡排序算法及Ruby版的简单实现_ruby专题

算法原理: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 实现假设有这样一个数组: [4, 1, 3, 2] 冒泡排序为从第一个数开始,吧这个数与后面的数比较,如果这个数比后面的大,就交换他们的位置. 比如,第一次比较4和1,发现4比1大,交换 -> [1, 4, 3,

Ruby实现二分搜索(二分查找)算法的简单示例_ruby专题

在计算机科学中,二分搜索(英语:binary search),也称折半搜索(英语:half-interval search).对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法.搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束:如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较.如果在某一步骤数组为空,则代表找不到.这种搜索算法每一次比较都使搜索范围缩小一半