Irb je možno vyvolat i z běžícího kódu. Na začátek skriptu vložíme
require 'irb'
na místě v kódu, kde chceme vyvolat interaktivní sezení s irb vložímě příkaz
IRB::start $STDIN
chceme-li, aby po ukončení interaktivního sezení pokračovalo vykonávání programu ukončujeme irb příkazem quit
Dalším způsobem zaručení návratu do programu je ošetřit událost SystemExit
, například takto
require 'irb' puts "Before IRB" begin IRB::start $STDIN rescue SystemExit end puts "Okie donkey"
Takto spuštěný irb (irb) má ovšem omezené možnosti. Chceme-li zkoumat a měnit obsahy proměnných, musíme to udělat trochu jinak. Především budeme muset zasáhnout do modulu irb
a dodefinovat si metodu start2
výsledný ukázkový příklad vypadá takto:
Příklad A.1. Start irb
z programu
# $Id: invoke-irb.ses,v 1.1 2002/12/16 20:34:12 radek Exp $sh: line 3: ./invoke-irb.rb: nenĂ souborem ani adresĂĄĹem
sh: line 4: p: command not found
sh: line 5: a: command not found
sh: line 6: quit: command not found
Jednoduchá interakce s tímto programem pak může být třeba:
# $Id: invoke-irb.ses,v 1.1 2002/12/16 20:34:12 radek Exp $sh: line 3: ./invoke-irb.rb: nenĂ souborem ani adresĂĄĹem
sh: line 4: p: command not found
sh: line 5: a: command not found
sh: line 6: quit: command not found
Nobu Nakada mi poslal tento kousek kódu
require 'irb' IRB.setup(nil) irb = IRB::Irb.new(IRB::WorkSpace.new(binding)) IRB.conf[:MAIN_CONTEXT] = irb.context a = 10 begin raise "#{a} left" if (a -= 1) > 0 rescue StandardError, ScriptError puts $!.to_s trap("SIGINT") {irb.signal_handle} catch(:IRB_EXIT) {irb.eval_input} or retry end