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
Alle martedì 25 dicembre 2007, Bertram S. ha scritto:
irb(main):002:0> irb C.new
class C
----<---------------------------
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
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
Hi James,
Am Dienstag, 25. Dez 2007, 23:01:54 +0900 schrieb James T.:
This was mercilessly stolen and adapted from a post on Errs blog (only
google has the answer ;):
[...]
old_args = ARGV
ARGV.size.times { ARGV.shift }
[…]
old_args.each { |a| ARGV << a }
[…]
The code is not actually mature. The clearing could be done by an
ARGV.clear; this part won’t work either because old_args will be
cleared as well.
Besides that the solution works perfectly. Thank you very much!
Bertram
On Dec 25, 2007, at 05:08 , Bertram S. wrote:
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.
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?
Hi,
Am Mittwoch, 26. Dez 2007, 05:16:03 +0900 schrieb Ryan D.:
On Dec 25, 2007, at 05:08 , Bertram S. wrote:
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?
I wanted to know how to do it without having to type in the same
constant or global variable name every time.
Bertram