ruby/doc/irb/irb.rd

392 строки
11 KiB
R

irb -- interactive ruby
$Release Version: 0.9 $
$Revision$
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.
--- source, 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:
%