IRb:如何启动一个预加载类的交互式Ruby会话

7

在我学习Ruby语言的过程中,我花费了很多时间在IRb中。它真的很棒!但是,由于我对它的能力不是很了解,并且还是一个“初学者”,我想知道以下内容:

  • 如何“清空”会话,而无需重新启动IRb(或者这不可能)。
  • 如何配置IRb在启动时加载一堆源文件“hello.rb”和“hello_objects.rb”?因为我经常在这些文件中工作,所以知道一种缩写来加载这些类会很好,而不必手动为每个类键入“load”。
5个回答

18

我不确定能否“清除”一个会话。但是,你可以像这样加载你的类:

irb -r 'hello.rb' -r 'hello_objects.rb'

3
把所有的需求放到一个rb文件中,然后只需要require那个文件会很有帮助。 - Beanish

6

您可以在irb中管理会话。启动irb并尝试以下操作:

x=1
irb     # Opens a new session
puts x  # error
jobs    # lists sessions
quit    # kills current session
puts x  # 1

还有"fg (number)"这个命令,它可以在会话之间切换。 详情请见:http://tagaholic.me/2009/05/11/demystifying-irb-commands.html


4

我相信您要做的是修改您的~/.irbrc文件。之前提到过,但没有给出示例。这里有一个简短的示例,需要在您的irb会话中引用一些常见的实用程序:

# Print to yaml format with "y"
require 'yaml'
# Pretty printing
require 'pp'
# Ability to load rubygem modules
require 'rubygems'
# Tab completion
require 'irb/completion'

2
这些不是直接的答案,但可以应用于您想更好地理解irb的愿望。
控制台对象提供了许多可用于"irb"的方法。
methods.grep(/irb/).sort
=> ["irb", "irb_bindings", "irb_cb", "irb_change_binding", "irb_change_workspace",
"irb_chws", "irb_context", "irb_current_working_binding", "irb_current_working_workspace",
"irb_cwb", "irb_cws", "irb_cwws", "irb_exit", "irb_fg", "irb_jobs", "irb_kill", "irb_load",
"irb_pop_binding", "irb_pop_workspace", "irb_popb", "irb_popws", "irb_print_working_binding",
"irb_print_working_workspace", "irb_push_binding", "irb_push_workspace", "irb_pushb",
"irb_pushws", "irb_pwb", "irb_pwws", "irb_quit", "irb_require", "irb_source", "irb_workspaces"]

玩一下这些内容,让自己更加愉快。

另一个是“conf”对象,它可以提供有关irb环境的反馈:

conf
=> conf.ap_name="irb"
conf.auto_indent_mode=false
conf.back_trace_limit=16
conf.debug_level=1
conf.echo=true
conf.ignore_eof=false
conf.ignore_sigint=true
conf.inspect_mode=nil
conf.io=#<IRB::StdioInputMethod:0x79da0>
conf.irb=#<IRB::Irb:0x7c58c>
conf.irb_name="irb"
conf.irb_path="(irb)"
conf.last_value=...
conf.line_no=6
conf.load_modules=[]
conf.prompt_c="%N(%m):%03n:%i* "
conf.prompt_i="%N(%m):%03n:%i> "
conf.prompt_mode=:DEFAULT
conf.prompt_s="%N(%m):%03n:%i%l "
conf.rc=true
conf.return_format="=> %s\n"
conf.thread=#<Thread:0x31790 run>
conf.use_readline=false
conf.verbose=nil
conf.workspace=#<IRB::WorkSpace:0x7aa84 @main=main, @binding=#<Binding:0x7a2a0>>

2
你可以把任何Ruby代码放到你的~/.irbrc文件中,这样每次运行IRB时都会被评估。在这种情况下,你需要使用require语句。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接