Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

irb question - variable definitions when calling irb from a script problem

0 views
Skip to first unread message

Nura...@aol.com

unread,
Oct 26, 2005, 3:12:52 PM10/26/05
to

Dear all,

I have written a script containing some quite lengthy definitions of an
array full
of parameters and methods for it. This works fine, but now I'd like
to change some value in the array and use some method of the script on it.
I do not know which value of the parameters will be changed nor
really, which method out of several will be used in advance, so I'd
like to use irb to do that interactively.
I can call irb from the script, but then it does not remember that
in the script, I had defined array[4544]="my nice parameter value"
anymore, same thing if I start irb directly and use require "myscript.rb".

Is there some workaround that permits to make a variable definition in a
script "interactively global" ?

Best regards,

Axel

Florian Groß

unread,
Oct 26, 2005, 5:13:57 PM10/26/05
to
Nura...@aol.com wrote:

> I can call irb from the script, but then it does not remember that
> in the script, I had defined array[4544]="my nice parameter value"
> anymore, same thing if I start irb directly and use require "myscript.rb".

By default IRB.start starts the IRB instance in its new custom context
that will not have local variables from your context defined.

In ruby-breakpoint I'm using this overloaded version to specify a context:

> module IRB # :nodoc:
> class << self; remove_method :start; end
> def self.start(ap_path = nil, main_context = nil, workspace = nil)
> $0 = File::basename(ap_path, ".rb") if ap_path
>
> # suppress some warnings about redefined constants
> old_verbose, $VERBOSE = $VERBOSE, nil
> IRB.setup(ap_path)
> $VERBOSE = old_verbose
>
> if @CONF[:SCRIPT] then
> irb = Irb.new(main_context, @CONF[:SCRIPT])
> else
> irb = Irb.new(main_context)
> end
>
> if workspace then
> irb.context.workspace = workspace
> end
>
> @CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
> @CONF[:MAIN_CONTEXT] = irb.context
>
> old_sigint = trap("SIGINT") do
> begin
> irb.signal_handle
> rescue RubyLex::TerminateLineInput
> # ignored
> end
> end
>
> catch(:IRB_EXIT) do
> irb.eval_input
> end
> ensure
> trap("SIGINT", old_sigint)
> end
> end

It's used as IRB.start(nil, binding).

0 new messages