mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	 23bcab8d63
			
		
	
	
		23bcab8d63
		
	
	
	
	
		
			
			magic number when optimizer turned on, regardless of rlimit values. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4247 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
		
			
				
	
	
		
			392 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			R
		
	
	
	
	
	
			
		
		
	
	
			392 lines
		
	
	
	
		
			11 KiB
		
	
	
	
		
			R
		
	
	
	
	
	
| irb -- interactive ruby
 | |
| 		$Release Version: 0.9 $
 | |
| 		$Revision$
 | |
| 		$Date$
 | |
| 		by Keiju ISHITSUKA(keiju@ishitsuka.com)
 | |
| 		by gotoken-san who is original translater from japanese version
 | |
| 
 | |
| =begin
 | |
| = What is irb?
 | |
| 
 | |
| irb stands for `interactive ruby'. irb is a tool to execute interactively
 | |
| ruby expressions read from stdin. 
 | |
| 
 | |
| = Invoking
 | |
| 
 | |
|   % irb
 | |
| 
 | |
| = Usage
 | |
| 
 | |
| Use of irb is easy if you know ruby.  Executing irb, prompts are 
 | |
| displayed as follows. Then, enter expression of ruby. A input is
 | |
| executed when it is syntacticaly completed. 
 | |
| 
 | |
|   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> 
 | |
| 
 | |
| And, Readline extesion module can be used with irb. Using Readline
 | |
| is the standard default action if Readline is installed. 
 | |
| 
 | |
| = Command line option
 | |
| 
 | |
|   irb.rb [options] file_name opts
 | |
|   options:
 | |
|   -f		    suppress read ~/.irbrc 
 | |
|   -m		    bc mode (fraction or matrix are available)
 | |
|   -d                set $DEBUG  to true (same as `ruby -d')
 | |
|   -Kc		    same as `ruby -Kc'
 | |
|   -r load-module    same as `ruby -r'
 | |
|   --verbose	    command input is echoed(default)
 | |
|   --noverbose	    command input isn't echoed
 | |
|   --echo	    commands are echoed immediately before execution(default)
 | |
|   --noecho	    commands aren't echoed immediately before execution
 | |
|   --inspect	    uses `inspect' for output (the default except bc mode)
 | |
|   --noinspect	    doesn't uses inspect for output
 | |
|   --readline	    uses Readline extension module
 | |
|   --noreadline	    doesn't use Readline extension module
 | |
|   --prompt prompt-mode
 | |
|   --prompt-mode prompt-mode
 | |
| 		    switches prompt mode. Pre-defined prompt modes are
 | |
| 		    `default', `simple', `xmp' and `inf-ruby'
 | |
| 			    
 | |
|   --inf-ruby-mode   uses prompt appreciate for inf-ruby-mode on emacs. 
 | |
| 		    Suppresses --readline. 
 | |
|   --simple-prompt   simple prompt mode
 | |
|   --noprompt	    no prompt
 | |
|   --tracer	    display trace for each execution of commands.
 | |
|   --back-trace-limit n
 | |
| 		    displayes backtrace top n and tail n. The default
 | |
| 		    value is 16. 
 | |
|   --irb_debug n	    sets internal debug level to n (It shouldn't be used)
 | |
|   -v, --version	    prints the version of irb
 | |
| 
 | |
| = Configurations
 | |
| 
 | |
| irb reads `~/.irbrc' when it is invoked. If `~/.irbrb' doesn't exist
 | |
| irb try to read in the order `.irbrc', `irb.rc', `_irbrc' then `$irbrc'. 
 | |
| 
 | |
| The following is altanative to the command line option. To use them
 | |
| type as follows in an irb session. 
 | |
| 
 | |
|   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
 | |
| 
 | |
| == Customizing prompt
 | |
| 
 | |
| To costomize the prompt you set a variable
 | |
| 
 | |
|   IRB.conf[:PROMPT]
 | |
| 
 | |
| For example, describe as follows in `.irbrc'. 
 | |
| 
 | |
|   IRB.conf[:PROMPT][:MY_PROMPT] = { # name of prompt mode
 | |
|     :PROMPT_I => nil,		  # normal prompt
 | |
|     :PROMPT_S => nil,		  # prompt for continuated strings
 | |
|     :PROMPT_C => nil,		  # prompt for continuated statement
 | |
|     :RETURN => "    ==>%s\n"	  # format to return value
 | |
|   }
 | |
| 
 | |
| Then, invoke irb with the above prompt mode by
 | |
| 
 | |
|   % irb --prompt my-prompt
 | |
| 
 | |
| Or add the following in `.irbrc'. 
 | |
| 
 | |
|   IRB.conf[:PROMPT_MODE] = :MY_PROMPT
 | |
| 
 | |
| Constants PROMPT_I, PROMPT_S and PROMPT_C specifies the format. 
 | |
| In the prompt specification, some special strings are available. 
 | |
| 
 | |
|   %N	command name which is running
 | |
|   %m	to_s of main object (self)
 | |
|   %M	inspect of main object (self)
 | |
|   %l	type of string(", ', /, ]), `]' is inner %w[...]
 | |
|   %NNi	indent level. NN is degits and means as same as printf("%NNd"). 
 | |
|         It can be ommited
 | |
|   %NNn	line number. 
 | |
|   %%    %
 | |
| 
 | |
| For instance, the default prompt mode is defined as follows:
 | |
| 
 | |
| 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"
 | |
| } 
 | |
| 
 | |
| RETURN is used to printf. 
 | |
| 
 | |
| == Configurating subirb
 | |
| 
 | |
| The command line option or IRB.conf specify the default behavior of
 | |
| (sub)irb. On the other hand, each conf of in the next sction `6. Command' 
 | |
| is used to individually configurate (sub)irb. 
 | |
| 
 | |
| If proc is set to IRB.conf[:IRB_RC], its subirb will be invoked after
 | |
| execution of that proc under giving the context of irb as its
 | |
| aregument. By this mechanism each subirb can be configurated. 
 | |
| 
 | |
| = Command
 | |
| 
 | |
| For irb commands, both simple name and `irb_'-prefixed name are prepared. 
 | |
| 
 | |
| --- exit, quit, irb_exit	
 | |
|     Quits (sub)irb. 
 | |
| 
 | |
| --- conf, irb_context
 | |
|     Displays current configuration. Modifing the configuration is
 | |
|     achieved by sending message to `conf'. 
 | |
| 
 | |
| --- conf.eval_history = N
 | |
|     Sets execution result history.
 | |
|     N is a integer or nil. If N > 0, the number of historys is N. 
 | |
|     If N == 0, the number of historys is unlimited. If N is nill,
 | |
|     execution result history isn't used(default).
 | |
| 
 | |
| --- conf.back_trace_limit
 | |
|     Sets display lines of backtrace as top n and tail n. 
 | |
|     The default value is 16.
 | |
|     
 | |
| --- conf.debug_level = N
 | |
|     Sets debug level of irb. 
 | |
| 
 | |
| --- conf.ignore_eof = true/false
 | |
|     Whether ^D (control-d) will be ignored or not. 
 | |
|     If false is set, ^D means quit. 
 | |
| 
 | |
| --- conf.ignore_sigint= true/false
 | |
|     Whether ^C (control-c) will be ignored or not. 
 | |
|     If false is set, ^D means quit.  If true, 
 | |
|       during input:   cancel inputing then return to top level. 
 | |
|       during execute: abondon current execution. 
 | |
| 
 | |
| --- conf.inf_ruby_mode = true/false
 | |
|     Whether inf-ruby-mode or not. The default value is false.
 | |
| 
 | |
| --- conf.inspect_mode = true/false/nil
 | |
|     Specifies inspect mode. 
 | |
|     true:  display inspect
 | |
|     false: display to_s
 | |
|     nil:   inspect mode in non math mode, 
 | |
|            non inspect mode in math mode. 
 | |
| 
 | |
| --- conf.math_mode
 | |
|     Whether bc mode or not. 
 | |
| 
 | |
| --- conf.use_loader = true/false
 | |
|     Whether irb's own file reader method is used when load/require or not. 
 | |
|     This mode is globaly affected (irb wide). 
 | |
| 
 | |
| --- conf.prompt_c
 | |
|     prompt for a continuating statement (e.g, immediately after of `if')
 | |
| 
 | |
| --- conf.prompt_i
 | |
|     standard prompt
 | |
| 
 | |
| --- conf.prompt_s
 | |
|     prompt for a continuating string
 | |
| 
 | |
| --- conf.rc
 | |
|     Whether ~/.irbrc is read or not. 
 | |
| 
 | |
| --- conf.use_prompt = true/false
 | |
|     Prompting or not. 
 | |
| 
 | |
| --- conf.use_readline = true/false/nil
 | |
|     Whether readline is used or not. 
 | |
|     true: uses 
 | |
|     false: doen't use
 | |
|     nil: intends to use readline except for inf-ruby-mode (default)
 | |
| #
 | |
| #--- conf.verbose=T/F
 | |
| #    Whether verbose messages are display or not. 
 | |
| 
 | |
| --- cws, chws, irb_change_workspace [obj]
 | |
|     obj will be self. If obj is omitted, self will be home-object, or
 | |
|     the main object of first started irb.
 | |
| 
 | |
| --- pushws, irb_pushws, irb_push_workspace [obj]
 | |
|     same as UNIX-shell command pushd.
 | |
| 
 | |
| --- popws, irb_popws, irb_pop_workspace
 | |
|     same as UNIX-shell command popd
 | |
| 
 | |
| --- irb [obj]
 | |
|     Invoke subirb. If obj is given, obj will be self. 
 | |
| 
 | |
| --- jobs, irb_jobs
 | |
|     List of subirb
 | |
| 
 | |
| --- fg n, irb_fg n
 | |
|     Switch into specified subirb. The following is candidates of n:
 | |
| 
 | |
|       irb number
 | |
|       thhread
 | |
|       irb object
 | |
|       self(obj which is specified of irb obj)
 | |
| 
 | |
| --- kill n, irb_kill n
 | |
|     Kill subirb. The means of n is as same as the case of irb_fg. 
 | |
| 
 | |
| --- souce, irb_source  path
 | |
|     This is a like UNIX-shell command source. evaluate script in path
 | |
|     on current context.
 | |
| 
 | |
| --- irb_load path, prev
 | |
|     irb-version of Ruby's load.
 | |
| 
 | |
| = System variable
 | |
| 
 | |
| --- _  The latest value of evaluation (it is local)
 | |
| --- __ The history of evaluation values.
 | |
|     __[line_no] return an evaluation value of line number<line_no>. If
 | |
|     line_no is a negative, return value before -<line_no> from latest
 | |
|     value.
 | |
| 
 | |
| = Session Example
 | |
| 
 | |
|   dim% ruby irb.rb
 | |
|   irb(main):001:0> irb                        # invoke subirb
 | |
|   irb#1(main):001:0> jobs                     # list of subirbs
 | |
|   #0->irb on main (#<Thread:0x400fb7e4> : stop)
 | |
|   #1->irb#1 on main (#<Thread:0x40125d64> : running)
 | |
|   nil
 | |
|   irb#1(main):002:0> fg 0                     # switch job
 | |
|   nil
 | |
|   irb(main):002:0> class Foo;end
 | |
|   nil
 | |
|   irb(main):003:0> irb Foo                    # invoke subirb which has the 
 | |
| 					      #              context of Foo
 | |
|   irb#2(Foo):001:0> def foo                   # define Foo#foo
 | |
|   irb#2(Foo):002:1>   print 1
 | |
|   irb#2(Foo):003:1> end
 | |
|   nil
 | |
|   irb#2(Foo):004:0> fg 0                      # switch job
 | |
|   nil
 | |
|   irb(main):004:0> jobs                       # list of 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 is defined asurely
 | |
|   ["foo"]
 | |
|   irb(main):006:0> fg 2                       # switch job
 | |
|   nil
 | |
|   irb#2(Foo):005:0> def bar                   # define 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                      # invoke subirb which has the
 | |
| 					      #  context of f (instance of Foo)
 | |
|   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         # evaluate f.foo
 | |
|   1nil
 | |
|   irb#3(#<Foo:0x4010af3c>):003:0> bar         # evaluate f.bar
 | |
|   barnil
 | |
|   irb#3(#<Foo:0x4010af3c>):004:0> kill 1, 2, 3# kill job
 | |
|   nil
 | |
|   irb(main):009:0> jobs
 | |
|   #0->irb on main (#<Thread:0x400fb7e4> : running)
 | |
|   nil
 | |
|   irb(main):010:0> exit                       # exit
 | |
|   dim% 
 | |
| 
 | |
| = Restrictions
 | |
| 
 | |
| Because irb evaluates the inputs immediately after the imput is
 | |
| syntactically completed, irb gives slight different result than
 | |
| directly use ruby. Known difference is pointed out here. 
 | |
| 
 | |
| 
 | |
| == Declaration of the local variable
 | |
| 
 | |
| The following causes an error in ruby:
 | |
| 
 | |
|   eval "foo = 0"
 | |
|   foo
 | |
|   --
 | |
|   -:2: undefined local variable or method `foo' for #<Object:0x40283118> (NameError)
 | |
|   ---
 | |
|   NameError
 | |
| 
 | |
| Though, the above will successfully done by irb. 
 | |
| 
 | |
|   >> eval "foo = 0"
 | |
|  => 0
 | |
|  >> foo
 | |
|  => 0
 | |
| 
 | |
| Ruby evaluates a code after reading entire of code and determination
 | |
| of the scope of local variables. On the other hand, irb do
 | |
| immediately. More precisely, irb evaluate at first
 | |
| 
 | |
|   evel "foo = 0" 
 | |
| 
 | |
| then foo is defined on this timing. It is because of this
 | |
| incompatibility.
 | |
| 
 | |
| If you'd like to detect those differences, begin...end can be used:
 | |
| 
 | |
|   >> begin
 | |
|   ?>   eval "foo = 0"
 | |
|   >>   foo
 | |
|   >> end
 | |
|   NameError: undefined local variable or method `foo' for #<Object:0x4013d0f0>
 | |
|   (irb):3
 | |
|   (irb_local_binding):1:in `eval'
 | |
| 
 | |
| == Here-document
 | |
| 
 | |
| Implementation of Here-document is incomplete. 
 | |
| 
 | |
| == Symbol
 | |
| 
 | |
| Irb can not always recognize a symbol as to be Symbol. Concretely, an
 | |
| expression have completed, however Irb regard it as continuation line.
 | |
| 
 | |
| =end
 | |
| 
 | |
| % Begin Emacs Environment
 | |
| % Local Variables:
 | |
| % mode: text
 | |
| % comment-column: 0
 | |
| % comment-start: "%"
 | |
| % comment-end: "\n"
 | |
| % End:
 | |
| %
 |