走近Ruby的交互式解释器irb

2016-11-04 09:50:37来源:作者:异步社区人点击

irb是一个交互式的Ruby解释器,这意味着它不用处理文件,而是处理会话中所输入的代码。irb是一个很好的工具,可以用于测试Ruby代码,同时也是一个学习Ruby的好工具。

在命令行中输入 irb ,就可以开启 irb 会话, irb 将显示以下提示符:

$ irb2.1.0 :001 >

正如之前所述,还可以使用 --simple-prompt 选项使irb输出更为简单明了:

$ irb --simple-prompt>>

irb一旦启动,便可以输入Ruby命令。这里可以运行单次摄氏-华氏度转换程序。在本例中,irb就像一个可装入口袋的计算器:它能计算任何输入并打印结果。因此不必使用print或者puts命令:

>> 100 * 9 / 5 + 32=> 212

如果想要知道一年有多少分钟,就输入适当的乘法计算表达式:

>> 365 * 24 * 60=> 525600

当然,irb也会处理输入的Ruby指令。比如,将天数、小时数、分钟数赋值给变量,然后将这些变量的值相乘,可以在irb中这样做:

>> days = 365=> 365>> hours = 24=> 24>> minutes = 60=> 60>> days * hours * minutes=> 525600

上面就是期望的计算结果。但是看一下上面条目的前3行,当输入 days = 365 的时候,irb会相应输出 365 ,为什么?

表达式 days = 365 是一个赋值表达式:将值 365 赋给了名为 days 的变量。赋值表达式最重要的任务就是将值赋给变量,因此可以在之后使用该变量。但是赋值表达式( days = 365 这一整行)也有一个值,赋值表达式的值就是它右边的值。当irb发现任何表达式时,它就会输出这个表达式的值。因此,当irb发现 days = 365 时,它就输出 365 。这看起来有些输出过度,这是因为其处在irb之中,与在irb中输入 2+2 就看到了结果,而没有显式地使用 print 语句去打印结果是同样的道理。

同样,调用 puts 方法也有一个返回值,名为 nil 。假如在 irb 中输入一个 puts 语句, irb 将会严格地执行它,同时还会打印输出 puts 的返回值。

$ irb --simple-prompt>> puts "Hello"Hello=> nil

这里有一种方法可以让irb不再喋喋不休,即使用 -noecho 参数。下面展示它如何使用:

$ irb --simple-prompt --noecho>> 2 + 2>> puts "Hi"Hi

幸好有 -noecho ,附加的表达式不会回显其结果了。 puts 命令确实被执行了(可以看到输出" Hi "),但是puts的返回值( nil )被屏蔽了。

中断irb

在irb中可能会卡在一个循环中,或者会话看起来像是失去响应(就好像是输入了左双引号而没有输入右双引号,或者类似的代码行)。重新回到控制的方法取决于系统本身,在最常见的系统中,使用Ctrl+C组合键可以达到这一目的。另一个方法是使用Ctrl+Z组合键。这是用户的系统中直接作用于irb上,最优、最通用的中断信息的方式。当然,如果任务被真的冻结,无响应,可以到进程或者任务管理器工具中终止irb进程。

要从irb中正常退出,输入 exit 即可。在许多系统中,Ctrl+D组合键同样适用。

偶然情况下,会遇到irb出现问题(那是说遇到致命错误然后结束进程),而大多数时候它会捕获自己的错误,然后让用户继续操作。

一旦掌握了使用irb的窍门并用于打印输出一切的值,以及如何关闭它,就会发现irb是一个极为有用的工具(和玩具)。

ri和RDoc

Ruby的源代码采用一种能自动生成文档的方式进行标记,然后通过一些工具解析和显示它们,这些工具是ri和RDoc。

最早由Dave Thomas编写的ri(Ruby索引)和RDoc(Ruby文档)是为Ruby程序提供文档的关系很紧密的一对工具。ri是一个命令行工具,而RDoc体系中包含了命令行工具rdoc。ri和rdoc是独立的程序,通过命令行来运行。(虽然用户也可以使用Ruby程序内所提供的工具,但这里暂时不讨论这方面的内容。)

RDoc是一个文档系统。假如在程序文件(Ruby或者C)中使用规定的RDoc格式编写了注释,rdoc会扫描程序文件,并抽取这些注释,智能地(通过注释的内容进行索引)组织它们,最后创建出漂亮的格式化文档。在Ruby源码树以及许多Ruby安装目录的Ruby文件中,在许多的源码文件中可以看到RDoc标记,包括了Ruby文件和C语言文件。

ri与RDoc相互配合:它提供了一种方式用于查看RDoc萃取过和组织过的文档信息。具体来说(虽然不是唯一的,除非用户定制它),ri被用于组织和显示从Ruby源文件而来的RDoc的信息。在完全安装好Ruby的任何系统中,都可以使用一个简单的命令行工具ri获得关于Ruby语言的详细信息。

例如,下面是请求关于 string 对象的 upcase 方法的信息的方法:

$ ri String#upcase

显示如下结果:

= String#upcase(from ruby core)------------------------------------------------------------------------------str.upcase -> new_str------------------------------------------------------------------------------Returns a copy of str with all lowercase letters replaced with theiruppercase counterparts. The operation is locale insensitive---only characters``a'' to ``z'' are affected. Note: case replacement is effective only inASCII region."hEllO".upcase #=> "HELLO"

在 String 和 upcase 中间的散列标记( # ),用于在 ri 命令中表明查找的实例方法,并与类方法区分。要查询类方法,可以使用分隔符::替换#。第3章将会讲述实例方法和类方法的区分。这里的要点是通过命令去处理大量的文档。

注意

默认情况下,运行 ri 会通过一个分页器(如UNIX中的 more 命令)输出结果。它会在输出的末端暂停,直到用户点击空格或者其他按键才会展示下一屏的信息,或者当所有的信息显示完毕就会完全退出。准确地说,在这个例子中,用户必须按下的按键因操作系统和分页器不同会有所变化。空格键、回车键、Esc键、Ctrl+C组合键、Ctrl+D组合键和Ctrl+Z组合键都是很好的选择。如果想要使用 ri 而不进行分页显示,可以在命令行使用的时候加入 -T 开关( ri –Ttopic )。

本文节选自 《Ruby程序员修炼之道(第2版)》

内容简介

这是一本深受好评的书。它不仅是一本纯Ruby的书,也不仅是一本纯Rails的书,而是一本为Rails程序员“优化”过的Ruby书。

本书从Ruby编程语言的基础开始一直讲到动态特性,其中包含大量的真实代码示例并附有详细的注解,对日常使用Ruby进行编程中会遇到的每个知识点都进行了清晰的讲解。本书的内容由浅入深,主要包含Ruby编程语言的语法、面向对象的特性、默认对象self、控制流技术、常用的内置类、正则表达式、I/O操作,最后用大量的篇幅讲述了Ruby中最值得关注的动态特性。

本书不仅适合Ruby编程语言的初学者,也适合有经验的开发者以及那些想要真正提升Ruby编程技术的爱好者阅读和学习,具有极高的参考价值。

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台