走近Ruby的交互式解释器irb
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"
在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编程技术的爱好者阅读和学习,具有极高的参考价值。
本文转载自异步社区。
原文链接:https://www.epubit.com/articleDetails?id=NC7E3EF91EAC000017FC017318DC0AE80
- 点赞
- 收藏
- 关注作者
评论(0)