帮酷LOGO
0 0 评论

正文
文章标签:EXP  IRB  

介绍

IRB是交互式ruby的缩写,是探索ruby编程语言和尝试代码而不用创建文件的一种快速方法,IRB是Read-Eval-Print Loop或REPL,是许多现代编程语言提供的工具。要使用它,可以启动irb可执行文件,并在提示符下键入ruby代码,IRB评估你键入的代码并显示结果。

IRB使你可以访问Ruby的所有功能,以及已安装的库或gems ,此外,可以配置IRB以保存命令历史,甚至允许自动完成代码。

在本教程中,你将使用IRB运行一些代码,检查它输出,引入外部库,并且自定义IRB会话。

启动和停止IRB

如果你有已安装ruby,你将拥有IRB ,你可以在ruby安装的计算机上启动它,方法是从命令行接口执行命令irb


irb

你将得到IRB提示符的问候:


IRB sessionirb(main):001:0>

注意:如果你已经安装了ruby,你的提示可能稍有不同,显示版本号:


IRB session from RVM2.4.0 :001 >

要获得本教程中显示的提示,使用irb --prompt inf-ruby启动IRB 。

IRB接受ruby语法,你可以在提示符下输入,通过将两个数字相加来尝试它:


2 + 2

ENTER键,IRB将显示结果:


IRB session=> 4

=>符号让你知道这是ruby表达式的返回值。

若要退出IRB,请在提示处键入exit,或按CTRL+D ,你将返回到shell提示符。

深入探讨一下IRB,看看如何使用它来探索代码。

在IRB会话中执行代码

要演示此问题,请在新的IRB会话中执行此语句:


puts"Hello World"

ENTER键时,你将看到来自IRB的两个结果:


OUTPUTHello World
=> nil

第一个结果是puts方法的输出,它打印指定的字符串,后面是一个换行符,puts方法将文本打印到标准输出设备,这是你的屏幕,但是puts方法有一个返回值,因为ruby中的每个方法都有返回值,puts方法返回nil,这就是IRB所显示的。

每次执行语句时,都会发生提示,指示新行号:


irb(main):001:0> puts"Hello World"
Hello World
=> nil
irb(main):002:0>

可以像在独立ruby程序中一样,在IRB会话中给变量赋值,通过在你的IRB会话中键入该语句,并且按ENTER来执行该语句:


birth_year = 1868

你将看到此语句的返回值回显:


IRB session=> 1868

变量birth_year拥有这个值,但是由于ruby中大多数语句都返回值,所以IRB在这里显示了返回值。

首先添加两个变量,创建一个名为death_year的变量:


death_year = 1921

然后通过从death_year中减去birth_year来创建变量age_at_death


age_at_death = death_year - birth_year

IRB给变量赋值,但是也向你显示了结果:


IRB session=> 53

有时你需要编写跨多行的代码,在你的IRB会话中键入此代码,然后在每行之后按ENTER


["Tiger","Great White","Angel"].select do |shark|
 shark.include?("a")
end

IRB允许你输入多行代码,但是只有在认为代码在语法上完整时才执行代码。


IRB sessionirb(main):005:0> ["Tiger","Great White","Angel"].select do |shark|
irb(main):006:1* shark.include?("a")
irb(main):007:1> end

因为第一行包含do关键字,所以IRB在遇到end关键字之前不会尝试执行内容,然后显示结果:


IRB session=> ["Great White"]

使用IRB,你可以在将代码合并到自己的程序中之前先对它进行测试,以查看它们的工作方式。你也可以使用IRB来处理外部库。

使用库和Gems

你可以使用require语句将库导入到IRB会话中,就像在ruby程序中一样,这些库可以包含在ruby库标准中,你已经编写的内容,或者通过Rubygems.org安装的Gems 。

ruby库标准包括生成web请求和获取结果的模块,你可以像在ruby程序中那样使用你的IRB会话中的那些。

使用require语句从ruby库的标准导入网络HTTP ,在你的IRB会话中输入以下代码行,并且按ENTER

 
require'net/http'

 

IRB表明这个语句返回true,它告诉你库已成功加载,现在将此代码键入IRB,以请求icanhazip.com获取你的外部IP地址:


uri = URI.parse("http://icanhazip.com")
response = Net::HTTP.get_response uri
response.body

输入每行时,IRB显示返回值,因此你可以调试每个步骤:


IRB sessionirb(main):010:0> uri = URI.parse("http://icanhazip.com")
=> #<URI::HTTP http://icanhazip.com>
irb(main):011:0> response = Net::HTTP.get_response uri
=> #<Net::HTTPOK 200 OK readbody=true>
irb(main):012:0> response.body
=> 203.0.113.52n

如果找不到库,你将看到一个不同的响应,尝试导入httParty库,这样可以轻松处理HTTP请求:

 
require'httparty'

 

你将看到此消息:


IRB sessionLoadError: cannot load such file -- httparty

这条消息告诉你所需的库不可用,HTTParty是作为gem发行的,所以我们必须安装它,退出CTRL+D会话,或键入exit返回到提示符,然后使用gem命令安装httparty gem :


gem install httparty

现在再次启动irb


irb

尝试再次加载模块,在你的IRB会话中,键入以下代码:

 
require'httparty`

 

此时IRB将显示true,让你知道它能够加载库,将此代码输入IRB以尝试它:


response = HTTParty.get("http://icanhazip.com")
response.body

你将看到输出到屏幕上的输出:


IRB session=> 203.0.113.52n

现在看看如何使用IRB来探索和测试你自己的ruby代码。

将代码加载到IRB中

如果启动IRB会话,并且使用-r开关,则可以指定要在IRB启动时加载的库或gem。例如,irb -r httparty将使用已经加载的httparty gem启动一个IRB会话,这意味着你可以跳过显式的require httparty语句。

通过键入exit或按CTRL+D退出你的IRB会话。

创建一个名为ip_grabber.rb的新的ruby文件,用get方法定义IPGrabber对象,在提供URL时将返回计算机的外部IP地址,使用HTTParty库从icanhazip.com获取响应,在我们自己的程序中使用这个IPGrabber对象来隔离代码和外部更改;

将此代码添加到文件以定义该类:

ip_grabber.rb

require 'httparty'
class IPGrabber

 def initialize()
 @url ="http://icanhazip.com"
 end

 def get
 response = HTTParty.get(@url)
 response.body.chomp # remove the n if it exists
 end
end

保存文件并退出编辑器。

然后启动IRB并加载这个文件,由于它是本地文件,而不是gem或库,因此我们必须指定路径,我们也不需要指定文件的.rb扩展。


irb -r ./ip_grabber

IRB会话会加载,你可以像下面这样在会话中开始使用这个新对象:


ip = IPGrabber.new
ip.get

你将看到以下输出:


IRB session=> 203.0.113.52

通过将自己的代码加载到IRB会话中,可以先检查代码,并且使用自己的库,然后再将它们合并到完整的程序中。

既然你知道如何在IRB会话中使用代码,那么让我们看一下如何自定义IRB会话。

自定义IRB

你可以创建一个叫.irbrc的配置文件,让你定制你的IRB会话,然后,你可以添加对自动补全,缩进和命令历史的支持。

在你的主目录中创建此文件:


nano ~/.irbrc

首先,在IRB中配置自动完成支持,

~/.irbrc

require 'irb/completion'

接下来,添加支持将命令历史保存到外部文件的支持。

~/.irbrc

IRB.conf[:SAVE_HISTORY] = 1000

在启用后,你键入的最后1000条语句将被记录到你的主目录中的.irb_history文件中。

另外,当你打开一个新的IRB会话时,你的历史记录将自动加载,并且你可以使用向上和向下箭头键在这些条目之间移动,或者使用CTRL R进行反向搜索,就像在Bash中一样 。

如果要指定不同的历史记录文件,请将它添加到配置文件中:

~/.irbrc

IRB.conf[:HISTORY_FILE] = '~/your_history_filename'

接下来,在配置文件中添加该行以启用自动缩进,这在编写类,方法和块时很方便:

~/.irbrc

IRB.conf[:AUTO_INDENT] = true

配置文件可以包含其他有效的ruby代码,这意味着你可以定义helper方法或者使用require加载其他库,例如,要将history helper添加到将显示历史记录的IRB会话中,请将此代码添加到.irbrc

.irbrc

def history
 history_array = Readline::HISTORY.to_a
 print history_array.join("n")
end

加载IRB会话时,键入history以查看你的IRB历史记录,

.irbrc


# history command
def history(count = 0)

 # Get history into an array
 history_array = Readline::HISTORY.to_a

 # if count is > 0 we'll use it.
 # otherwise set it to 0
 count = count > 0 ? count : 0

 if count > 0
 from = hist.length - count
 history_array = history_array[from..-1] 
 end

 print history_array.join("n")
end

保存文件并启动新的IRB会话,

结束语

IRB提供了一个试验Ruby代码的地方。



文章标签:EXP  IRB  

正文

Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语