Hi,
this may be easy to anwer but it is difficult to google for.
While developping I would like to play around with objects from
time to time. Just like this:
irb(main):001:0> class C ; def f ; "F" ; end ; end
=> nil
irb(main):002:0> irb C.new
irb#1(#<C:0xb7910d40>):001:0> f
=> "F"
irb#1(#<C:0xb7910d40>):002:0>
In common my classes are not so easy to type in. So, I would like
to call Irb from somewhere inside the application as I do here:
---->-call_irb.rb---------------
#!/usr/bin/ruby
class C
def f
"F"
end
end
if $0 == __FILE__ then
require "irb"
$c = C.new
IRB.start
end
----<---------------------------
and then
user@host $ ./call_irb.rb
irb(main):001:0> irb $c
irb#1(#<C:0xb7be4ee0>):001:0> f
=> "F"
irb#1(#<C:0xb7be4ee0>):002:0>
Is there a way how I can call C.new's Irb directly without doing
the long-winded definition of a global variable first? I already
examined the irb sources but this seems to be well-hidden to me.
Thanks in advance and Merry Christmas,
Bertram
···
--
Bertram Scharpf
Stuttgart, Deutschland/Germany
http://www.bertram-scharpf.de
Alle martedì 25 dicembre 2007, Bertram Scharpf ha scritto:
Hi,
this may be easy to anwer but it is difficult to google for.
While developping I would like to play around with objects from
time to time. Just like this:
irb(main):001:0> class C ; def f ; "F" ; end ; end
=> nil
irb(main):002:0> irb C.new
irb#1(#<C:0xb7910d40>):001:0> f
=> "F"
irb#1(#<C:0xb7910d40>):002:0>
In common my classes are not so easy to type in. So, I would like
to call Irb from somewhere inside the application as I do here:
---->-call_irb.rb---------------
#!/usr/bin/ruby
class C
def f
"F"
end
end
if $0 == __FILE__ then
require "irb"
$c = C.new
IRB.start
end
----<---------------------------
and then
user@host $ ./call_irb.rb
irb(main):001:0> irb $c
irb#1(#<C:0xb7be4ee0>):001:0> f
=> "F"
irb#1(#<C:0xb7be4ee0>):002:0>
Is there a way how I can call C.new's Irb directly without doing
the long-winded definition of a global variable first? I already
examined the irb sources but this seems to be well-hidden to me.
Thanks in advance and Merry Christmas,
Bertram
Not a direct answer to your question, but can't you load the file with the
definition of the class in irb?
Stefano
In common my classes are not so easy to type in. So, I would like
to call Irb from somewhere inside the application as I do here:
if $0 == __FILE__ then
require "irb"
$c = C.new
IRB.start
end
I'm a bit confused. Your subject line IS handled by this code. Indeed, this is what I grabbed from some of my code when I read the subject line:
def explore
Object.const_set :"G", self
require 'irb'
puts "Your grammar is in the constant G"
IRB.start(__FILE__)
end
So, what is the actual subject of this question? It doesn't seem to be "long-windedness" (below) either.
and then
user@host $ ./call_irb.rb
irb(main):001:0> irb $c
irb#1(#<C:0xb7be4ee0>):001:0> f
=> "F"
irb#1(#<C:0xb7be4ee0>):002:0>
Is there a way how I can call C.new's Irb directly without doing
the long-winded definition of a global variable first? I already
examined the irb sources but this seems to be well-hidden to me.
I'm confused and havet o assume the question is a bit vague. How is "$c = " long winded? What do you actually want to know?
···
On Dec 25, 2007, at 05:08 , Bertram Scharpf wrote:
Merry christmas!
This was mercilessly stolen and adapted from a post on Errs blog (only google has the answer ;):
require 'irb'
module IRB
def self.start_session(binding)
IRB.setup(nil)
workspace = WorkSpace.new(binding)
if @CONF[:SCRIPT]
irb = Irb.new(workspace, @CONF[:SCRIPT])
else
irb = Irb.new(workspace)
end
@CONF[:IRB_RC].call(irb.context) if @CONF[:IRB_RC]
@CONF[:MAIN_CONTEXT] = irb.context
trap("SIGINT") do
irb.signal_handle
end
catch(:IRB_EXIT) do
irb.eval_input
end
end
end
def meths(o); puts (o.methods - Class.new.methods).join("\n"); end
def dROP! b
old_args = ARGV
ARGV.size.times { ARGV.shift }
if defined? IRBHelper
foo = Class.new
foo.instance_eval do
include IRBHelper
end
puts "Helper Methods: #{(foo.new.methods - Class.new.methods).sort.join(', ')}"
include IRBHelper
end
IRB.start_session b
old_args.each { |a| ARGV << a }
end
···
On 25 Dec 2007, at 13:26, Stefano Crocco wrote:
Alle martedì 25 dicembre 2007, Bertram Scharpf ha scritto:
Hi,
this may be easy to anwer but it is difficult to google for.
While developping I would like to play around with objects from
time to time. Just like this:
irb(main):001:0> class C ; def f ; "F" ; end ; end
=> nil
irb(main):002:0> irb C.new
irb#1(#<C:0xb7910d40>):001:0> f
=> "F"
irb#1(#<C:0xb7910d40>):002:0>
In common my classes are not so easy to type in. So, I would like
to call Irb from somewhere inside the application as I do here:
---->-call_irb.rb---------------
#!/usr/bin/ruby
class C
def f
"F"
end
end
if $0 == __FILE__ then
require "irb"
$c = C.new
IRB.start
end
----<---------------------------
and then
user@host $ ./call_irb.rb
irb(main):001:0> irb $c
irb#1(#<C:0xb7be4ee0>):001:0> f
=> "F"
irb#1(#<C:0xb7be4ee0>):002:0>
Is there a way how I can call C.new's Irb directly without doing
the long-winded definition of a global variable first? I already
examined the irb sources but this seems to be well-hidden to me.
Thanks in advance and Merry Christmas,
Bertram
Not a direct answer to your question, but can't you load the file with the
definition of the class in irb?
Stefano