【问题标题】:What's the point of an interactive Ruby subshell?交互式 Ruby 子外壳的意义何在?
【发布时间】:2013-04-28 06:07:13
【问题描述】:

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

【问题讨论】:

  • 为什么不能?
  • 如果需要在不污染先前定义的变量或类的情况下尝试一些东西,而不打开新的终端窗口并在那里启动 IRB,怎么样?
  • @theTinMan 实际上,类继续在 irb 子外壳中定义(就像模块一样)。在子 shell 中定义时,即使在关闭子 shell 后它们仍然可用。

标签: ruby shell terminal irb


【解决方案1】:

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

  1. 取消定义局部变量
  2. 更改 irb 会话的 self
  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

self 更改为 irb 会话

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

注意:这也称为 irb 会话的“更改绑定”。

顺便说一句:可以在不打开子会话的情况下更改绑定(cbirb_change-binding 都为你做这件事)。但是使用 subsession 回到旧的绑定会更方便。

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

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

详情请见this insteresting SO answer

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 2016-04-16
    • 1970-01-01
    • 2015-09-26
    • 2014-01-11
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2014-12-01
    相关资源
    最近更新 更多