Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Interactive mode

Reply
Thread Tools

Interactive mode

 
 
Rick Ashton
Guest
Posts: n/a
 
      07-17-2006
Hi

Is there some sort of 'python -i' equivalent for ruby or irb? I can't
seem to find it. I know you can 'load' or 'require' a module, but I need
to load the file into the current scope. Currently all I seem to be able
to do is either code and run file, or copy and paste into irb if I
wanted the '-i' functionality. I'd really like to "enter interactive
mode after executing the script or the command" as the python man page
puts it. It'll be enormously useful for testing and stuff. Sorry if it's
a rather n00b or repeated question, I couldn't search since the function
is "disabled due to technical problems".

Thanks!

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
Patrick Hurley
Guest
Posts: n/a
 
      07-17-2006
On 7/17/06, Nicholas Seckar <(E-Mail Removed)> wrote:
> If you just want to load some code before irb starts, you can use -r
>
> cd /tmp
> echo 'puts 10' > startup.rb
> irb -r startup.rb
>
> If you'd like to stop execution in various places, take a look at
> ruby-breakpoint.
>
> On 7/17/06, Rick Ashton <(E-Mail Removed)> wrote:
> >
> > Hi
> >
> > Is there some sort of 'python -i' equivalent for ruby or irb? I can't
> > seem to find it. I know you can 'load' or 'require' a module, but I need
> > to load the file into the current scope. Currently all I seem to be able
> > to do is either code and run file, or copy and paste into irb if I
> > wanted the '-i' functionality. I'd really like to "enter interactive
> > mode after executing the script or the command" as the python man page
> > puts it. It'll be enormously useful for testing and stuff. Sorry if it's
> > a rather n00b or repeated question, I couldn't search since the function
> > is "disabled due to technical problems".
> >
> > Thanks!
> >
> > --
> > Posted via http://www.ruby-forum.com/.
> >
> >

>
>


As mentioned you can use breakpoint (excellect tool) and irb -r, also
don't forget you can use require and/or load from within irb as well
to load (and execute) a script.

pth

 
Reply With Quote
 
 
 
 
Rick Ashton
Guest
Posts: n/a
 
      07-17-2006
Thanks guys

But it still doesn't load the file into the current scope as I mentioned
before. Is there some way to do this?

ie:

$ echo a=5 > blah.rb
$ irb -r blah.rb
irb(main):001:0> a
NameError: undefined local variable or method `a' for main:Object
from (irb):1


Thanks!

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
Mike Harris
Guest
Posts: n/a
 
      07-17-2006
I think he wants to be able to have a file with abc=4 in it, and then be
able to load the file and have the local variable abc be in scope.
Neither of these solutions do that.

Patrick Hurley wrote:

> On 7/17/06, Nicholas Seckar <(E-Mail Removed)> wrote:
>
>> If you just want to load some code before irb starts, you can use -r
>>
>> cd /tmp
>> echo 'puts 10' > startup.rb
>> irb -r startup.rb
>>
>> If you'd like to stop execution in various places, take a look at
>> ruby-breakpoint.
>>
>> On 7/17/06, Rick Ashton <(E-Mail Removed)> wrote:
>> >
>> > Hi
>> >
>> > Is there some sort of 'python -i' equivalent for ruby or irb? I can't
>> > seem to find it. I know you can 'load' or 'require' a module, but I

>> need
>> > to load the file into the current scope. Currently all I seem to be

>> able
>> > to do is either code and run file, or copy and paste into irb if I
>> > wanted the '-i' functionality. I'd really like to "enter interactive
>> > mode after executing the script or the command" as the python man

>> page
>> > puts it. It'll be enormously useful for testing and stuff. Sorry if

>> it's
>> > a rather n00b or repeated question, I couldn't search since the

>> function
>> > is "disabled due to technical problems".
>> >
>> > Thanks!
>> >
>> > --
>> > Posted via http://www.ruby-forum.com/.
>> >
>> >

>>
>>

>
> As mentioned you can use breakpoint (excellect tool) and irb -r, also
> don't forget you can use require and/or load from within irb as well
> to load (and execute) a script.
>
> pth
>
>



 
Reply With Quote
 
Thorben Mueller
Guest
Posts: n/a
 
      07-17-2006
Rick Ashton schrieb:
> Thanks guys
>
> But it still doesn't load the file into the current scope as I mentioned
> before. Is there some way to do this?
>
> ie:
>
> $ echo a=5 > blah.rb
> $ irb -r blah.rb
> irb(main):001:0> a
> NameError: undefined local variable or method `a' for main:Object
> from (irb):1
>
>
> Thanks!
>


Hi Rick,

try eval(File.read('blah.rb'))

~dingsi

 
Reply With Quote
 
Sean O'Halpin
Guest
Posts: n/a
 
      07-17-2006
On 7/17/06, Thorben Mueller <(E-Mail Removed)> wrote:
> Rick Ashton schrieb:
> > Thanks guys
> >
> > But it still doesn't load the file into the current scope as I mentioned
> > before. Is there some way to do this?
> >
> > ie:
> >
> > $ echo a=5 > blah.rb
> > $ irb -r blah.rb
> > irb(main):001:0> a
> > NameError: undefined local variable or method `a' for main:Object
> > from (irb):1
> >
> >
> > Thanks!
> >

>
> Hi Rick,
>
> try eval(File.read('blah.rb'))
>
> ~dingsi
>
>


eval() won't create local variables - it will update one if it already
exists however:

$ cat eval-test.rb
a = 42
$ cat eval-scope.rb
eval(File.read("eval-test.rb"))
p a
$ ruby eval-scope.rb
eval-scope.rb:2: undefined local variable or method `a' for
main:Object (NameError)

$ cat eval-scope2.rb
a = nil
eval(File.read("eval-test.rb"))
p a
$ ruby eval-scope2.rb
42


Regards,
Sean

 
Reply With Quote
 
Justin Collins
Guest
Posts: n/a
 
      07-17-2006


Sean O'Halpin wrote:
> On 7/17/06, Thorben Mueller <(E-Mail Removed)> wrote:
>> Rick Ashton schrieb:
>> > Thanks guys
>> >
>> > But it still doesn't load the file into the current scope as I

>> mentioned
>> > before. Is there some way to do this?
>> >
>> > ie:
>> >
>> > $ echo a=5 > blah.rb
>> > $ irb -r blah.rb
>> > irb(main):001:0> a
>> > NameError: undefined local variable or method `a' for main:Object
>> > from (irb):1
>> >
>> >
>> > Thanks!
>> >

>>
>> Hi Rick,
>>
>> try eval(File.read('blah.rb'))
>>
>> ~dingsi
>>
>>

>
> eval() won't create local variables - it will update one if it already
> exists however:
>
> $ cat eval-test.rb
> a = 42
> $ cat eval-scope.rb
> eval(File.read("eval-test.rb"))
> p a
> $ ruby eval-scope.rb
> eval-scope.rb:2: undefined local variable or method `a' for
> main:Object (NameError)
>
> $ cat eval-scope2.rb
> a = nil
> eval(File.read("eval-test.rb"))
> p a
> $ ruby eval-scope2.rb
> 42
>
>
> Regards,
> Sean
>


Interestingly, it _does_ work for me within irb:

$ cat test.rb
puts "hi"
a = 1
$ irb
irb(main):001:0> eval(File.read('test.rb'))
hi
=> 1
irb(main):002:0> puts a
1
=> nil



Which I think will work for what the OP wanted?

-Justin

 
Reply With Quote
 
Sean O'Halpin
Guest
Posts: n/a
 
      07-17-2006
On 7/18/06, Justin Collins <(E-Mail Removed)> wrote:
>
>
> Sean O'Halpin wrote:
> > On 7/17/06, Thorben Mueller <(E-Mail Removed)> wrote:
> >> Rick Ashton schrieb:
> >> > Thanks guys
> >> >
> >> > But it still doesn't load the file into the current scope as I
> >> mentioned
> >> > before. Is there some way to do this?
> >> >
> >> > ie:
> >> >
> >> > $ echo a=5 > blah.rb
> >> > $ irb -r blah.rb
> >> > irb(main):001:0> a
> >> > NameError: undefined local variable or method `a' for main:Object
> >> > from (irb):1
> >> >
> >> >
> >> > Thanks!
> >> >
> >>
> >> Hi Rick,
> >>
> >> try eval(File.read('blah.rb'))
> >>
> >> ~dingsi
> >>
> >>

> >
> > eval() won't create local variables - it will update one if it already
> > exists however:
> >
> > $ cat eval-test.rb
> > a = 42
> > $ cat eval-scope.rb
> > eval(File.read("eval-test.rb"))
> > p a
> > $ ruby eval-scope.rb
> > eval-scope.rb:2: undefined local variable or method `a' for
> > main:Object (NameError)
> >
> > $ cat eval-scope2.rb
> > a = nil
> > eval(File.read("eval-test.rb"))
> > p a
> > $ ruby eval-scope2.rb
> > 42
> >
> >
> > Regards,
> > Sean
> >

>
> Interestingly, it _does_ work for me within irb:
>
> $ cat test.rb
> puts "hi"
> a = 1
> $ irb
> irb(main):001:0> eval(File.read('test.rb'))
> hi
> => 1
> irb(main):002:0> puts a
> 1
> => nil
>
>
>
> Which I think will work for what the OP wanted?
>
> -Justin
>
>

You're right - another one of those little quirks of irb

(I'm too abashed to admit I missed the point)

Regards,
Sean

 
Reply With Quote
 
Logan Capaldo
Guest
Posts: n/a
 
      07-18-2006

On Jul 17, 2006, at 7:12 PM, Sean O'Halpin wrote:

> On 7/18/06, Justin Collins <(E-Mail Removed)> wrote:
>>
>>
>> Sean O'Halpin wrote:
>> > On 7/17/06, Thorben Mueller <(E-Mail Removed)> wrote:
>> >> Rick Ashton schrieb:
>> >> > Thanks guys
>> >> >
>> >> > But it still doesn't load the file into the current scope as I
>> >> mentioned
>> >> > before. Is there some way to do this?
>> >> >
>> >> > ie:
>> >> >
>> >> > $ echo a=5 > blah.rb
>> >> > $ irb -r blah.rb
>> >> > irb(main):001:0> a
>> >> > NameError: undefined local variable or method `a' for

>> main:Object
>> >> > from (irb):1
>> >> >
>> >> >
>> >> > Thanks!
>> >> >
>> >>
>> >> Hi Rick,
>> >>
>> >> try eval(File.read('blah.rb'))
>> >>
>> >> ~dingsi
>> >>
>> >>
>> >
>> > eval() won't create local variables - it will update one if it

>> already
>> > exists however:
>> >
>> > $ cat eval-test.rb
>> > a = 42
>> > $ cat eval-scope.rb
>> > eval(File.read("eval-test.rb"))
>> > p a
>> > $ ruby eval-scope.rb
>> > eval-scope.rb:2: undefined local variable or method `a' for
>> > main:Object (NameError)
>> >
>> > $ cat eval-scope2.rb
>> > a = nil
>> > eval(File.read("eval-test.rb"))
>> > p a
>> > $ ruby eval-scope2.rb
>> > 42
>> >
>> >
>> > Regards,
>> > Sean
>> >

>>
>> Interestingly, it _does_ work for me within irb:
>>
>> $ cat test.rb
>> puts "hi"
>> a = 1
>> $ irb
>> irb(main):001:0> eval(File.read('test.rb'))
>> hi
>> => 1
>> irb(main):002:0> puts a
>> 1
>> => nil
>>
>>
>>
>> Which I think will work for what the OP wanted?
>>
>> -Justin
>>
>>

> You're right - another one of those little quirks of irb
>
> (I'm too abashed to admit I missed the point)
>
> Regards,
> Sean
>


It's not _really_ a little quirk of irb, it's the same quirk you
noted of eval (Since irb uses #eval to well, evaluate ).

e.g.:

% cat demo_eval.rb
puts eval("x = 1")
puts begin
x
rescue
"At parse time, x has not been declared as a local variable (by
assigning to it.)\n" +
"This means it will raise an exception when it gets evaluated here."
end

puts eval("x") # But x does indeed exist.


% ruby demo_eval.rb
1
At parse time, x has not been declared as a local variable (by
assigning to it.)
This means it will raise an exception when it gets evaluated here.
1



 
Reply With Quote
 
Sean O'Halpin
Guest
Posts: n/a
 
      07-18-2006
On 7/18/06, Logan Capaldo <(E-Mail Removed)> wrote:
>
> On Jul 17, 2006, at 7:12 PM, Sean O'Halpin wrote:
>
> > On 7/18/06, Justin Collins <(E-Mail Removed)> wrote:
> >>
> >>
> >> Sean O'Halpin wrote:
> >> > On 7/17/06, Thorben Mueller <(E-Mail Removed)> wrote:
> >> >> Rick Ashton schrieb:
> >> >> > Thanks guys
> >> >> >
> >> >> > But it still doesn't load the file into the current scope as I
> >> >> mentioned
> >> >> > before. Is there some way to do this?
> >> >> >
> >> >> > ie:
> >> >> >
> >> >> > $ echo a=5 > blah.rb
> >> >> > $ irb -r blah.rb
> >> >> > irb(main):001:0> a
> >> >> > NameError: undefined local variable or method `a' for
> >> main:Object
> >> >> > from (irb):1
> >> >> >
> >> >> >
> >> >> > Thanks!
> >> >> >
> >> >>
> >> >> Hi Rick,
> >> >>
> >> >> try eval(File.read('blah.rb'))
> >> >>
> >> >> ~dingsi
> >> >>
> >> >>
> >> >
> >> > eval() won't create local variables - it will update one if it
> >> already
> >> > exists however:
> >> >
> >> > $ cat eval-test.rb
> >> > a = 42
> >> > $ cat eval-scope.rb
> >> > eval(File.read("eval-test.rb"))
> >> > p a
> >> > $ ruby eval-scope.rb
> >> > eval-scope.rb:2: undefined local variable or method `a' for
> >> > main:Object (NameError)
> >> >
> >> > $ cat eval-scope2.rb
> >> > a = nil
> >> > eval(File.read("eval-test.rb"))
> >> > p a
> >> > $ ruby eval-scope2.rb
> >> > 42
> >> >
> >> >
> >> > Regards,
> >> > Sean
> >> >
> >>
> >> Interestingly, it _does_ work for me within irb:
> >>
> >> $ cat test.rb
> >> puts "hi"
> >> a = 1
> >> $ irb
> >> irb(main):001:0> eval(File.read('test.rb'))
> >> hi
> >> => 1
> >> irb(main):002:0> puts a
> >> 1
> >> => nil
> >>
> >>
> >>
> >> Which I think will work for what the OP wanted?
> >>
> >> -Justin
> >>
> >>

> > You're right - another one of those little quirks of irb
> >
> > (I'm too abashed to admit I missed the point)
> >
> > Regards,
> > Sean
> >

>
> It's not _really_ a little quirk of irb, it's the same quirk you
> noted of eval (Since irb uses #eval to well, evaluate ).
>
> e.g.:
>
> % cat demo_eval.rb
> puts eval("x = 1")
> puts begin
> x
> rescue
> "At parse time, x has not been declared as a local variable (by
> assigning to it.)\n" +
> "This means it will raise an exception when it gets evaluated here."
> end
>
> puts eval("x") # But x does indeed exist.
>
>
> % ruby demo_eval.rb
> 1
> At parse time, x has not been declared as a local variable (by
> assigning to it.)
> This means it will raise an exception when it gets evaluated here.
> 1
>

It's even quirkier than that even

# (ruby-talk 202571)
puts eval("x = 1")
puts begin
x
rescue
"At parse time, x has not been declared as a local variable (by
assigning to it.)\n" +
"This means it will raise an exception when it gets evaluated here."
end

puts "But x does indeed exist."
puts eval("x")
begin
puts x
rescue
puts "or does it?"
end
p local_variables
__END__
1
At parse time, x has not been declared as a local variable (by
assigning to it.)
This means it will raise an exception when it gets evaluated here.
1
or does it?
["x"]

My point was that eval won't introduce local variables into the
current scope (which irb does because of the tricks it plays with
bindings). It appears that when eval is called without a binding, it
temporarily pushes the current frame, re-uses the binding in effect
when the eval was called, then pops the current frame back again which
I guess has the effect of erasing changes to local variables (but
someone should tell the local_variables method!). This creates the
effect of a kind of binding that persists between calls to eval but
which is inaccessible to the local scope (except via eval). At least,
that's how it seems to me. I'd be grateful for a definitive
explanation of what's going on in eval.c:6500ff.

Regards,
Sean

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Newbie: async mode dedicated versus async mode interactive!! Pink_Floyd Cisco 4 06-16-2006 12:16 AM
is interactive mode same as calculator mode? Alex Python 1 09-09-2005 12:54 PM
Interactive/Non-interactive ASPX ? WJ ASP .Net 2 02-26-2005 02:54 AM
non Interactive and Interactive AAH Computer Support 0 01-09-2005 04:09 PM
Interactive and non interactive AAH Computer Support 1 01-09-2005 04:01 PM



Advertisments