走近Ruby的交互式解释器irb

举报
Tom forever 发表于 2020/02/09 10:14:44 2020/02/09
【摘要】 irb是一个交互式的Ruby解释器,这意味着它不用处理文件,而是处理会话中所输入的代码。irb是一个很好的工具,可以用于测试Ruby代码,同时也是一个学习Ruby的好工具。在命令行中输入irb,就可以开启irb会话,irb将显示以下提示符:$ irb2.1.0 :001 >正如之前所述,还可以使用--simple-prompt选项使irb输出更为简单明了:$ irb --simple-pro...

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 their
uppercase counterparts. The operation is locale insensitive---only characters``a'' to ``z'' are affected. Note: case replacement is effective only in
ASCII region.
"hEllO".upcase #=> "HELLO"

Stringupcase中间的散列标记(#),用于在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编程技术的爱好者阅读和学习,具有极高的参考价值。

本文转载自异步社区。

文链接:https://www.epubit.com/articleDetails?id=NC7E3EF91EAC000017FC017318DC0AE80


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。