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

N

Nuralanur

-------------------------------1130353930
Content-Type: text/plain; charset="US-ASCII"
Content-Transfer-Encoding: 7bit


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


-------------------------------1130353930--
 
F

Florian Groß

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).
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,230
Members
46,817
Latest member
DicWeils

Latest Threads

Top