交互式Shell

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"]

原文地址:https://www.cnblogs.com/djcsch2001/p/2035863.html