irb -- interactive ruby $Release Version: 0.9.5 $ $Revision: 11708 $ $Date: 2007-02-12 16:01:19 -0700 (Mon, 12 Feb 2007) $ by Keiju ISHITSUKA(keiju@ruby-lang.org) =begin = irbã¨ã¯? irbã¯interactive rubyã®ç¥ã§ã. rubyã®å¼ãæ¨æºå ¥åããç°¡åã«å ¥å/å®è¡ãã ããã®ãã¼ã«ã§ã. = èµ·å % irb ã§è¡ãªãã¾ã. = 使ãæ¹ irbã®ä½¿ãæ¹ã¯, Rubyããç¥ã£ã¦ããã°ããã£ã¦ç°¡åã§ã. åºæ¬çã«ã¯ irb 㨠ããã³ãã³ããå®è¡ããã ãã§ã. irbãå®è¡ããã¨, 以ä¸ã®ãããªããã³ã ãã表ãã¦ãã¾ã. å¾ã¯, rubyã®å¼ãå ¥ãã¦ä¸ãã. å¼ãå®çµããæç¹ã§å®è¡ ããã¾ã. dim% irb 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ã¯Readlineã¢ã¸ã¥ã¼ã«ã«ã対å¿ãã¦ãã¾ã. Readlineã¢ã¸ã¥ã¼ã«ã ã¤ã³ã¹ãã¼ã«ããã¦ããæã«ã¯, ããã使ãã®ãæ¨æºã®åä½ã«ãªãã¾ã. = ã³ãã³ããªãã·ã§ã³ irb.rb [options] file_name opts options: -f ~/.irbrc ãèªã¿è¾¼ã¾ãªã. -m bcã¢ã¼ã(åæ°, è¡åã®è¨ç®ãã§ãã) -d $DEBUG ãtrueã«ãã(ruby -d ã¨åã) -Kc ruby -Kcã¨åã -r load-module ruby -r ã¨åã. --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ã ç¨æããã¦ãã¾ã. ããã©ã«ãã¯defaultããã³ããã¢ã¼ ãã«ãªã£ã¦ãã¾ã. --inf-ruby-mode emacsã®inf-ruby-modeç¨ã®ããã³ãã表示ãè¡ãªã. ç¹ ã«æå®ããªãéã, readlineã©ã¤ãã©ãªã¯ä½¿ããªããªã. --simple-prompt é常ã«ã·ã³ãã«ãªããã³ãããç¨ããã¢ã¼ãã§ã. --noprompt ããã³ãã表示ãè¡ãªããªã. --tracer ã³ãã³ãå®è¡æã«ãã¬ã¼ã¹ãè¡ãªã. --back-trace-limit n ããã¯ãã¬ã¼ã¹è¡¨ç¤ºãããã¯ãã¬ã¼ã¹ã®é ãã n, å¾ã ããnã ãè¡ãªã. ããã©ã«ãã¯16 --irb_debug n irbã®ãããã°ãããã°ã¬ãã«ãnã«è¨å®ãã(å©ç¨ã㪠ãæ¹ãç¡é£ã§ããã). -v, --version irbã®ãã¼ã¸ã§ã³ã表示ãã = ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ irbèµ·åæã«``~/.irbrc''ãèªã¿è¾¼ã¿ã¾ã. ããåå¨ããªãå ´åã¯, ``.irbrc'', ``irb.rc'', ``_irbrc'', ``$irbrc''ã®é ã«loadã試ã¿ã¾ã. ãªãã·ã§ã³ãè¨å®ãã代ããã«, 以ä¸ã®ã³ãã³ãã§ãããã©ã«ãã®åä½ãè¨å® ã§ãã¾ã. IRB.conf[:IRB_NAME]="irb" IRB.conf[:MATH_MODE]=false IRB.conf[:USE_TRACER]=false IRB.conf[:USE_LOADER]=false IRB.conf[:IGNORE_SIGINT]=true IRB.conf[:IGNORE_EOF]=false IRB.conf[:INSPECT_MODE]=nil IRB.conf[:IRB_RC] = nil IRB.conf[:BACK_TRACE_LIMIT]=16 IRB.conf[:USE_LOADER] = false IRB.conf[:USE_READLINE] = nil IRB.conf[:USE_TRACER] = false IRB.conf[:IGNORE_SIGINT] = true IRB.conf[:IGNORE_EOF] = false IRB.conf[:PROMPT_MODE] = :DEFALUT IRB.conf[:PROMPT] = {...} IRB.conf[:DEBUG_LEVEL]=0 IRB.conf[:VERBOSE]=true == ããã³ããã®è¨å® ããã³ãããã«ã¹ã¿ãã¤ãºãããæã«ã¯, IRB.conf[:PROMPT] ãç¨ãã¾ã. ä¾ãã°, .irbrcã®ä¸ã§ä¸ã®ãããªå¼ãè¨è¿°ãã¾ã: IRB.conf[:PROMPT][:MY_PROMPT] = { # ããã³ããã¢ã¼ãã®åå :PROMPT_I => nil, # é常ã®ããã³ãã :PROMPT_N => nil, # ç¶ç¶è¡ã®ããã³ãã :PROMPT_S => nil, # æååãªã©ã®ç¶ç¶è¡ã®ããã³ãã :PROMPT_C => nil, # å¼ãç¶ç¶ãã¦ããæã®ããã³ãã :RETURN => " ==>%s\n" # ãªã¿ã¼ã³æã®ããã³ãã } ããã³ããã¢ã¼ããæå®ãããæã«ã¯, irb --prompt my-prompt ã§ãã®ããã³ããã¢ã¼ãã§èµ·åããã¾ã. ã¾ãã¯, .irbrcã«ä¸å¼ãè¨è¿°ãã¦ã OKã§ã. IRB.conf[:PROMPT_MODE] = :MY_PROMPT PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_Cã¯, ãã©ã¼ããããæå®ãã¾ã. %N èµ·åãã¦ããã³ãã³ãåãåºåããã. %m mainãªãã¸ã§ã¯ã(self)ãto_sã§åºåããã. %M mainãªãã¸ã§ã¯ã(self)ãinspectããã¦åºåããã. %l æååä¸ã®ã¿ã¤ãã表ã(", ', /, ], `]'ã¯%wã®ä¸ã®æ) %NNi ã¤ã³ãã³ãã®ã¬ãã«ã表ã. NNã¯æ°åãå ¥ãprintfã®%NNdã¨åã. ç ç¥å¯è½ %NNn è¡çªå·ã表ãã¾ã. %% % ä¾ãã°, ããã©ã«ãã®ããã³ããã¢ã¼ãã¯: IRB.conf[:PROMPT_MODE][:DEFAULT] = { :PROMPT_I => "%N(%m):%03n:%i> ", :PROMPT_N => "%N(%m):%03n:%i> ", :PROMPT_S => "%N(%m):%03n:%i%l ", :PROMPT_C => "%N(%m):%03n:%i* ", :RETURN => "%s\n" } ã¨ãªã£ã¦ãã¾ã. RETURNã¯, ç¾å¨ã®ã¨ããprintfå½¢å¼ã§ã. å°æ¥ä»æ§ãå¤ããããç¥ãã¾ãã. == ãµãirbã®è¨å® ã³ãã³ãã©ã¤ã³ãªãã·ã§ã³ããã³IRB.confã¯(ãµã)irbèµ·åæã®ããã©ã«ãã® è¨å®ã決ãããã®ã§, `5. ã³ãã³ã'ã«ããconfã§åå¥ã®(ãµã)irbã®è¨å®ã㧠ããããã«ãªã£ã¦ãã¾ã. IRB.conf[:IRB_RC]ã«procãè¨å®ããã¦ããã¨, ãµãirbãèµ·åããæã«ãã® procãirbã®ã³ã³ããã¹ããå¼æ°ã¨ãã¦å¼ã³åºãã¾ã. ããã«ãã£ã¦åå¥ã®ãµ ãirbãã¨ã«è¨å®ãå¤ãããã¨ãã§ããããã«ãªãã¾ã. = ã³ãã³ã irbæ¡å¼µã³ãã³ãã¯, ç°¡åãªååã¨é ã«`irb_'ãã¤ããååã¨ä¸¡æ¹å®ç¾©ãã㦠ãã¾ã. ããã¯, ç°¡åãªååãoverrideãããæã®ããã§ã. --- exit, quit, irb_exit çµäºãã. ãµãirbã®å ´å, ãã®ãµãirbãçµäºãã. --- conf, irb_context irbã®ç¾å¨ã®è¨å®ã表示ãã. è¨å®ã®å¤æ´ã¯, confã«ã¡ãã»ã¼ã¸ãéãã ã¨ã«ãã£ã¦è¡ãªãã. --- conf.eval_history = N å®è¡çµæã®ãã¹ããªæ©è½ã®è¨å®. nnã¯æ´æ°ãnil㧠nn>0 ã§ããã°ãã®æ°ã ããã¹ããªã«ããããnn==0ã®æ㯠ç¡å¶éã«è¨æ¶ãããnilã ã¨ãã¹ããªæ©è½ã¯ããã(ããã©ã«ã). --- Conf.back_trace_limit ããã¯ãã¬ã¼ã¹è¡¨ç¤ºãããã¯ãã¬ã¼ã¹ã®é ããn, å¾ãããnã ãè¡ãªã. ããã©ã«ãã¯16 --- conf.debug_level = N irbç¨ã®ãããã°ã¬ãã«ã®è¨å® --- conf.ignore_eof = true/false ^Dãå ¥åãããæã®åä½ãè¨å®ãã. trueã®æã¯^Dãç¡è¦ãã, falseã® æã¯irbãçµäºãã. --- conf.ignore_sigint= true/false ^Cãå ¥åãããæã®åä½ãè¨å®ãã. falseæã¯, irbãçµäºãã. trueã® æã®åä½ã¯ä»¥ä¸ã®ããã«ãªã: å ¥åä¸: ããã¾ã§å ¥åãããã®ããã£ã³ã»ã«ããããã¬ãã«ã«æ»ã. å®è¡ä¸: å®è¡ãä¸æ¢ãã. --- conf.inf_ruby_mode = true/false inf-ruby-modeç¨ã®ããã³ãã表示ãè¡ãªã. ããã©ã«ãã¯false. --- conf.inspect_mode = true/false/nil ã¤ã³ã¹ãã¯ãã¢ã¼ããè¨å®ãã. true: ã¤ã³ã¹ãã¯ããã¦è¡¨ç¤ºãã. false: é常ã®printã§è¡¨ç¤ºãã. nil: é常ã¢ã¼ãã§ããã°, inspect modeã¨ãªã, mathã¢ã¼ãã®æã¯, non inspect modeã¨ãªã. --- conf.math_mode åç §ã®ã¿. bcã¢ã¼ã(åæ°, è¡åã®è¨ç®ãã§ãã¾ã)ãã©ãã? --- conf.use_loader = true/false load/requireæã«irbã®fileèªã¿è¾¼ã¿æ©è½ãç¨ããã¢ã¼ãã®ã¹ã¤ãã(ããã© ã«ãã¯ç¨ããªã). ãã®ã¢ã¼ãã¯IRBå ¨ä½ã«åæ ããã. --- conf.prompt_c ifã®ç´å¾ãªã©, è¡ãç¶ç¶ãã¦ããæã®ããã³ãã. --- conf.prompt_i é常ã®ããã³ãã. --- conf.prompt_s æååä¸ãªã©ã表ãããã³ãã. --- conf.rc ~/.irbrcãèªã¿è¾¼ãã ãã©ãã? --- conf.use_prompt = true/false ããã³ãã表示ãããã©ãã? ããã©ã«ãã§ã¯ããã³ããã表示ãã. --- conf.use_readline = true/false/nil readlineã使ããã©ãã? true: readlineã使ã. false: readlineã使ããªã. nil: (ããã©ã«ã)inf-ruby-mode以å¤ã§readlineã©ã¤ãã©ãªãå©ç¨ãã ãã¨ãã. # #--- conf.verbose=T/F # irbãããããããªã¡ãã»ã¼ã¸ãåºåããã? --- cws, chws, irb_cws, irb_chws, irb_change_workspace [obj] objãselfã¨ãã. objãçç¥ãããã¨ãã¯, home workspace, ããªãã¡ irbãèµ·åããã¨ãã®main objectãselfã¨ãã. --- pushws, irb_pushws, irb_push_workspace [obj] UNIXã·ã§ã«ã³ãã³ãã®pushdã¨åæ§. --- popws, irb_popws, irb_pop_workspace UNIXã·ã§ã«ã³ãã³ãã®popdã¨åæ§. --- irb [obj] ãµãirbãç«ã¡ããã. objãæå®ãããæã¯, ãã®objãselfã¨ãã. --- jobs, irb_jobs ãµãirbã®ãªã¹ã --- fg n, irb_fg n æå®ãããµãirbã«ã¹ã¤ãããã. nã¯, 次ã®ãã®ãæå®ãã. irbçªå· ã¹ã¬ãã irbãªãã¸ã§ã¯ã self(irb objã§èµ·åããæã®obj) --- kill n, irb_kill n ãµãirbãkillãã. nã¯fgã¨åã. --- souce, irb_source path UNIXã·ã§ã«ã³ãã³ãã®sourceã¨ä¼¼ã¦ãã. ç¾å¨ã®ç°å¢ä¸ã§pathå ã®ã¹ã¯ãª ãããè©ä¾¡ãã. --- irb_load path, prev Rubyã®loadã®irbç. = ã·ã¹ãã å¤æ° --- _ åã®è¨ç®ã®å®è¡çµæãè¦ãã¦ãã(ãã¼ã«ã«å¤æ°). --- __ å®è¡çµæã®å±¥æ´ãè¦ãã¦ãã. __[line_no]ã§ããã®è¡ã§å®è¡ããçµæãå¾ããã¨ãã§ãã. line_noãè² ã® æã«ã¯ãææ°ã®çµæãã-line_noåã®çµæãå¾ããã¨ãã§ãã. = 使ç¨ä¾ 以ä¸ã®ãããªæãã§ã. dim% ruby irb.rb 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# jobã®kill nil irb(main):009:0> jobs #0->irb on main (#<Thread:0x400fb7e4> : running) nil irb(main):010:0> exit # çµäº dim% = 使ç¨ä¸ã®å¶é irbã¯, è©ä¾¡ã§ããæç¹(å¼ãéããæç¹)ã§ã®é次å®è¡ãè¡ãªãã¾ã. ããã㣠ã¦, rubyãç´æ¥ä½¿ã£ãæã¨, è¥å¹²ç°ãªãåä½ãè¡ãªãå ´åãããã¾ã. ç¾å¨æããã«ãªã£ã¦ããåé¡ç¹ã説æãã¾ã. == ãã¼ã«ã«å¤æ°ã®å®£è¨ rubyã§ã¯, 以ä¸ã®ããã°ã©ã ã¯ã¨ã©ã¼ã«ãªãã¾ã. eval "foo = 0" foo -- -:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError) --- NameError ã¨ããã, irbãç¨ãã㨠>> eval "foo = 0" => 0 >> foo => 0 ã¨ãªã, ã¨ã©ã¼ãèµ·ããã¾ãã. ããã¯, rubyãæåã«ã¹ã¯ãªããå ¨ä½ãã³ã³ ãã¤ã«ãã¦ãã¼ã«ã«å¤æ°ã決å®ããããã§ã. ããã«å¯¾ã, irbã¯å®è¡å¯è½ã« ãªã(å¼ãéãã)ã¨èªåçã«è©ä¾¡ãã¦ããããã§ã. ä¸è¨ã®ä¾ã§ã¯, evel "foo = 0" ãè¡ãªã£ãæç¹ã§è©ä¾¡ãè¡ãªã, ãã®æç¹ã§å¤æ°ãå®ç¾©ããããã, 次å¼ã§ å¤æ°fooã¯å®ç¾©ããã¦ããããã§ã. ãã®ãããªrubyã¨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' == ãã¢ããã¥ã¡ã³ã ç¾å¨ã®ã¨ãããã¢ããã¥ã¡ã³ãã®å®è£ ã¯ä¸å®å ¨ã§ã. == ã·ã³ãã« ã·ã³ãã«ã§ãããã©ããã®å¤æãééãããã¨ãããã¾ã. å ·ä½çã«ã¯å¼ãå®äº ãã¦ããã®ã«ç¶ç¶è¡ã¨è¦ãªããã¨ãããã¾ã. =end % Begin Emacs Environment % Local Variables: % mode: text % comment-column: 0 % comment-start: "%" % comment-end: "\n" % End: %