交互式Ruby子shell有什么意义?

key*_*ons 3 ruby shell terminal irb

在终端('irb')中启动交互式Ruby shell,可以继续无休止地打开irb子shell.这有什么意义?

tes*_*ssi 7

到目前为止,我已经看到了irb subsessions可以为您做的三件有用的事情:

  1. 取消定义局部变量
  2. 更改selfirb会话
  3. irb 是一套很棒的工具的一部分

取消定义局部变量

嵌套irb启动一个新的子会话,其中不再定义所有局部变量(不是类,模块等).

irb(main):001:0> a = 1
#=> 1
irb(main):002:0> irb
irb#1(main):001:0> a
  NameError: undefined local variable or method `a' for main:Object from (irb#1):1
Run Code Online (Sandbox Code Playgroud)

改变selfirb会话

irb(main):001:0> self
#=> main
irb(main):002:0> irb "Hello World"
irb#1(Hello World):001:0> self
#=> "Hello World"
irb#1(Hello World):002:0> length
#=> 11
Run Code Online (Sandbox Code Playgroud)

注意:这也称为irb会话的"更改绑定".

顺便说一句:这是可能的改变,而无需打开一个子会话的绑定(cb,irb_change-binding都为你做的).但是通过subsession回到旧的绑定更方便.

最棒的是,这irb只是一组有用的命令之一

  • irb:开始一个新的分会
  • jobs:列出子会话
  • fg:切换到subsession
  • kill:杀了一个subsession

有关详细信息,请参阅此有趣的SO答案.