methods=
sublibraries=irb.xmp,irb.completion,irb.frame
requires=
classes=IrbCommands,IRB=Context
is_sublibrary=false

irb  Interactive Ruby άǤ
irb ȤȡRuby μɸϤñϡ¹Ԥ뤳ȤǤޤ

=== irb λȤ

Ruby ΤäƤ irb ȤΤϴñǤ
irb ޥɤ¹ԤȡʲΤ褦ʥץץȤɽޤ

  $ irb
  irb(main):001:0>

Ȥ Ruby μϤǡμ¹Ԥ졢̤ɽޤ

  irb(main):001:0> 1+2
  3
  irb(main):002:0> class Foo
  irb(main):003:1>   def foo
  irb(main):004:2>     print 1
  irb(main):005:2>   end
  irb(main):006:1> end
  nil
  irb(main):007:0> 

ޤ irb ޥɤ [[lib:readline]] 饤֥ˤбƤޤ
readline 饤֥꤬󥹥ȡ뤵Ƥˤ
ưŪ˥ޥɥ饤ԽεǽȤ褦ˤʤޤ

=== irb Υޥɥ饤󥪥ץ

  irb [options] file_name opts
  options:
  -f                ~/.irbrc ɤ߹ޤʤ
  -m                bc ⡼ (ʬȹη׻Ǥ)
  -d                $DEBUG  true ˤ (ruby -d Ʊ)
  -Kc               ruby -Kc Ʊ
  -r library        ruby -r Ʊ
  -I                ruby -I Ʊ
  --verbose         줫¹ԤԤɽ (ǥե)
  --noverbose       줫¹ԤԤɽʤ
  --echo            ¹Է̤ɽ (ǥե)
  --noecho          ¹Է̤ɽʤ
  --inspect         ̽ϤinspectѤ (bc ⡼ɰʳǤϥǥե)
  --noinspect       ̽ϤinspectѤʤ
  --readline        readline饤֥Ѥ
  --noreadline      readline饤֥ѤʤǥեȤǤ
                    inf-ruby-mode ʳ readline 饤֥Ѥ롣
  --prompt prompt-mode
  --prompt-mode prompt-mode
                    ץץȥ⡼ɤڤؤ롣Ƥ
                    ץȥ⡼ɤϡdefault/simple/xmp/inf-ruby
  --inf-ruby-mode   emacsinf-ruby-mode ѤΥץץɽԤʤ
                    ä˻꤬ʤ¤ readline 饤֥ϻȤʤʤ롣
  --simple-prompt
                    ˥ץʥץץȤѤ⡼ɡ
  --noprompt        ץץȤɽʤ
  --tracer          ޥɼ¹Ի˥ȥ졼롣
  --back-trace-limit n
                    Хåȥ졼ɽХåȥ졼Ƭ n
                     n Ԥʤǥեͤ 16
  --irb_debug n     irb ΥǥХå٥ n ꤹ
                    (桼Ѥ٤ǤϤʤ)
  -v, --version     irb ΥСɽ

=== irb Υޥ

irb ޥɤϵư˥ۡǥ쥯ȥ .irbrc Ȥեɤ߹ߤޤ
.irbrc  Ruby ץȤǤۡǥ쥯ȥ .irbrc ¸ߤʤϡ
ȥǥ쥯ȥ .irbrc, irb.rc, _irbrc, $irbrc ֤˥ɤ褦
ߤޤ

ʲΤ褦 (Ruby )  .irbrc ˵Ҥȡ
irb ޥɤΥץꤷΤƱ̤ޤ

  IRB.conf[:AUTO_INDENT] = false
  IRB.conf[:BACK_TRACE_LIMIT] = 16
  IRB.conf[:DEBUG_LEVEL] = 1
  IRB.conf[:ECHO] = nil
  IRB.conf[:EVAL_HISTORY] = nil
  IRB.conf[:HISTORY_FILE] = nil
  IRB.conf[:IGNORE_EOF] = true
  IRB.conf[:IGNORE_SIGINT] = true
  IRB.conf[:INSPECT_MODE] = nil
  IRB.conf[:IRB_NAME] = "irb"
  IRB.conf[:IRB_RC] = nil
  IRB.conf[:MATH_MODE] = false
  IRB.conf[:PROMPT] = {....}
  IRB.conf[:PROMPT_MODE] = :DEFALUT
  IRB.conf[:SINGLE_IRB] = false
  IRB.conf[:SAVE_HISTORY] = nil
  IRB.conf[:USE_LOADER] = true
  IRB.conf[:USE_READLINE] = nil
  IRB.conf[:USE_TRACER] = true
  IRB.conf[:VERBOSE] = true

==== ץץȤΥޥ

irb ΥץץȤ򥫥ޥϡ
ޤȼΥץץȥ⡼ɤ
򥳥ޥɥ饤 .irbrc ˻ꤷޤ

ޤץץȥ⡼ɤˤϡ
㤨 .irbrc ǰʲΤ褦˵Ҥޤ

  # ץץȥ⡼ MY_PROMPT 
  IRB.conf[:PROMPT][:MY_PROMPT] = {
    :PROMPT_I => nil,          # ̾Υץץ
    :PROMPT_S => nil,          # ʸʤɤη³ԤΥץץ
    :PROMPT_C => nil,          # ³ƤΥץץ
    :RETURN => "    ==>%s\n"   # ᥽åɤΥץץ
  }

޺ץץȥ⡼ɤȤˤϡ
ʲΤ褦 irb ޥɤ --prompt ץꤷޤ

  $ irb --prompt my-prompt

ꤹΤݤʤ顢.irbrc ˰ʲμ򵭽Ҥޤ

  # ץץȥ⡼ MY_PROMPT Ȥ
  IRB.conf[:PROMPT_MODE] = :MY_PROMPT

PROMPT_I, PROMPT_S, PROMPT_C ˤϥեޥåʸꤷޤ
եޥåʸǤ [[m:Kernel#printf]] Τ褦
%פѤˡȤޤ
եޥåʸǻѲǽʵˡϰʲ̤Ǥ

: %N
    ưƤ륳ޥ̾
: %m
    main ֥ (self)  to_s ʸ
: %M
    main ֥ (self)  inspect ʸ
: %l
    ʸΥפɽ (", ', /, ], `]'%wλ)
: %NNi
    ǥȤΥ٥NN ˱ͤᤷʸ
    NN Ͼάǽ
: %NNn
    ֹNN ˱ͤᤷʸ
    NN Ͼάǽ
: %%
    ʸ%פ켫

ޤRETURN ϸߤΤȤ printf Ʊǻꤷޤ
ϻͤѤǽޤ

㤨СǥեȤΥץץȥ⡼ɤǤ
defaultץץץȥ⡼ɤϰʲΤ褦ꤵƤޤ

  IRB.conf[:PROMPT_MODE][:DEFAULT] = {
    :PROMPT_I => "%N(%m):%03n:%i> ",
    :PROMPT_S => "%N(%m):%03n:%i%l ",
    :PROMPT_C => "%N(%m):%03n:%i* ",
    :RETURN => "%s\n"
  } 

ץץȥ⡼ɤ :DEFAULT
¾ :NULL, :CLASSIC, :SIMPLE, :XMP Ƥޤ

===  irb

irb Ǥϡư irb 󥿥ץ꥿ȤΩĶ
֥ irbפǤդοư뤳ȤǤޤ
 irb ϡirb ¹ˡirbפϤȵưޤ

㤨аʲμ¹򸫤Ƥ

  irb(main):004:0> x = "OK"          # ѿ x 
  => "OK"
  irb(main):005:0> x                 # x ɽ
  => "OK"
  irb(main):006:0> irb               #  irb ư
  irb#1(main):001:0> x               # x ɽ
  NameError: undefined local variable or method `x' for main:Object
	  from (irb#1):1:in `Kernel#binding'

ưΥ󥿥ץ꥿ǥѿ x ޤ
irbפǥ irb ưȡ
ѿ x ʤʤäƤޤ
줬ΩĶפΰ̣Ǥ

===  irb 

irb ޥɵưΥ󥿥ץ꥿
ޥɥ饤󥪥ץ IRB.conf ͤǷޤޤ
Фơ irb 󥿥ץ꥿ϡ
ƥ󥿥ץ꥿Ρconfץ֥ȤͤǷޤޤ

conf ֥Ȥͤѹˤϡ
ޤʲΤ褦˥ irb ưƤ conf ֥Ȥ
ͤİѹˡޤ

  $ irb
  irb(main):001:0> irb                     #  irb ư
  irb#1(main):001:0> conf.prompt_i         # prompt_i ͤǧ
  => "%N(%m):%03n:%i> "
  irb#1(main):002:0> conf.prompt_i = ">"   # prompt_i ͤѹ
  => ">"
  >                                        # ץץȤѤä

 irb ư뤿ӤϤΤݤǤ
ǡIRB.conf[:IRB_RC] ȤˡҲ𤷤ޤ

IRB.conf[:IRB_RC]  Proc ֥ȤꤷƤȡ
 irb ư뤿Ӥˡ Proc ֥Ȥ
IRB::Context ֥ȤϤƼ¹Ԥޤ
ˤäƥ irb ޤȤꤹ뤳ȤǤޤ

ʲ򼨤ޤ

  $ irb
  irb(main):001:0> IRB.conf[:IRB_RC] = lambda {|conf| conf.prompt_i = "> " }
  => #<Proc:0x00002a95fa3fd8@(irb):2>
  irb(main):002:0> irb
  > 

=== irb λ

irb Τʻʲ˼ޤ

  $ irb
  irb(main):001:0> irb                        # irbΩ
  irb#1(main):001:0> jobs                     # irbΥꥹ
  #0->irb on main (#<Thread:0x400fb7e4> : stop)
  #1->irb#1 on main (#<Thread:0x40125d64> : running)
  nil
  irb#1(main):002:0> fg 0                     # jobΥå
  nil
  irb(main):002:0> class Foo;end
  nil
  irb(main):003:0> irb Foo                    # Foo򥳥ƥȤirb
                                              # Ω
  irb#2(Foo):001:0> def foo                   # Foo#foo
  irb#2(Foo):002:1>   print 1
  irb#2(Foo):003:1> end
  nil
  irb#2(Foo):004:0> fg 0                      # job򥹥å
  nil
  irb(main):004:0> jobs                       # jobΥꥹ
  #0->irb on main (#<Thread:0x400fb7e4> : running)
  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
  nil
  irb(main):005:0> Foo.instance_methods       # Foo#foo
                                              # Ƥ
  ["foo"]
  irb(main):006:0> fg 2                       # job򥹥å
  nil
  irb#2(Foo):005:0> def bar                   # Foo#bar
  irb#2(Foo):006:1>  print "bar"
  irb#2(Foo):007:1> end
  nil
  irb#2(Foo):010:0>  Foo.instance_methods
  ["bar", "foo"]
  irb#2(Foo):011:0> fg 0                      
  nil
  irb(main):007:0> f = Foo.new
  #<Foo:0x4010af3c>
  irb(main):008:0> irb f                      # FooΥ󥹥󥹤irb
                                              # Ω.
  irb#3(#<Foo:0x4010af3c>):001:0> jobs
  #0->irb on main (#<Thread:0x400fb7e4> : stop)
  #1->irb#1 on main (#<Thread:0x40125d64> : stop)
  #2->irb#2 on Foo (#<Thread:0x4011d54c> : stop)
  #3->irb#3 on #<Foo:0x4010af3c> (#<Thread:0x4010a1e0> : running)
  nil
  irb#3(#<Foo:0x4010af3c>):002:0> foo         # f.fooμ¹
  nil
  irb#3(#<Foo:0x4010af3c>):003:0> bar         # f.barμ¹
  barnil
  irb#3(#<Foo:0x4010af3c>):004:0> kill 1, 2, 3# jobkill
  nil
  irb(main):009:0> jobs
  #0->irb on main (#<Thread:0x400fb7e4> : running)
  nil
  irb(main):010:0> exit                       # λ
  $

=== Ѿ

irb, ɾǤ(Ĥ)Ǥ༡¹ԤԤʤޤ. 
ä, rubyľܻȤäȼ㴳ۤʤưԤʤ礬ޤ.

餫ˤʤäƤޤ.

==== ѿ

Ruby ǤϰʲΥץϥ顼ˤʤޤ.

  eval "foo = 0"
  p foo    # -:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)

Ȥ irb ѤȡʲΤ褦ˡ顼ˤʤޤ

  >> eval "foo = 0"
  => 0
  >> foo
  => 0

ΰ㤤ϡRuby  irb ΥץΥѥˡκ˵ޤ
Ruby Ϻǽ˥ץΤ򥳥ѥ뤷ƥѿꤷޤ
Фirb ϼ뤷Ƽ¹Բǽˤʤäǽ֤˥ѥ뤷ޤ
嵭Ǥϡ

  evel "foo = 0" 

Ϥ줿Ǥޤμ򥳥ѥ롦¹Ԥޤ
λѿ foo 뤿ᡢ
μϤǤǤѿ foo ƤΤǤ

 Ruby  irb ưΰ㤤ʤϡ
irb ǤϰʲΤ褦˼ begin  end ǤäϤƤ

  >> begin
  ?>   eval "foo = 0"
  >>   foo
  >> end
  NameError: undefined local variable or method `foo' for #<Object:0x4013d0f0>
  (irb):3
  (irb_local_binding):1:in `eval'

==== ҥɥ

ߤΤȤҥɥȤμԴǤ

==== ܥ

irb ϥܥǤ뤫ɤȽǤְ㤨뤳Ȥޤ
ŪˤϡλƤΤ˷³ԤȸʤȤޤ
