irb是从命令行运行的交互式shell
在命令行中输入irb后回车,进入交互式ruby模式
(1) 可以用load载入rb文件执行,如以下文件
code/fib_up_to.rb
def fib_up_to(max)
i1,i2=1,1
while i1<=max
yield i1
i1,i2=i2,i1+i2
end
end
%irb
irb(main):001:0>load 'code/fib_up_to.rb'
=>true
irb(main):002:0>result=[]
=>[]
irb(main):003:0>fib_up_to(20){|var| result<<var}
=>nil
irb(main):004:0 >result
=>[1,1,2,3,5,8,13]
(2) Tab补齐
irb(main):001:0>a="cat"
=>"cat"
如果现在想尝试string%reverse方法,可先键入a.re然后按下Tab键两次,这时会出现所有以"re"开头的方法
a.reject a.replace a.resonse_to? a.reverse a.reverse!
我们继续按下v为a.rev,再次按下Tab键,会总动补齐为a.reverse回车
=>"tac"
如果在irb中定义了一个类,当想调用它的方法,也可用Tab补齐,Tab补齐是以一个扩展库来实现的,即irb/completion,当调用irb是,你可以从命令行加载它
irb -r irb/completion
或在运行中加入
irb(mai):001:0 >require 'irb/completion'
=>true
(3) 子会话
irb支持多个并发的会话,当前端的会话只有一个,其他的在被激活前处于休眠状态,如:
% irb -r code/fib_up_to.rb
irb(mai):001:0 >result=[]
irb(mai):002:0 >fib_up_to(10) {|var| result <<val}
=>nil
irb(mai):003:0 >result
=>[1,1,2,3,5,8]
irb(mai):004:0>#create a nested irb session
irb(mai):005:0>#irb
irb#1(main):001:0 >result=%w{cat dog horse}
irb#1(main):002:0 >result.map{|val| val.upcase}
=>["CAT","DOG","HORSE"]
irb#1(main):003:0 >jobs
=>#0->irb on main (#<Thread:0xx331740>:stop)
#1->irb#1 on main(#<Thread \: ox341694>:running)
irb#1(main):004:0>fg 0
irb(main):005:0>result
=>[1,1,2,3,5,8]
irb(main):006:0>fg 1
irb #1(main):005:0>result
=>["cat","dog","horse"]