類別 IRB::JobManager
屬性
current_job[RW]
作用中的 irb 會話
公開類別方法
new() 按一下以切換來源
建立新的 JobManager
物件
# File lib/irb/ext/multi-irb.rb, line 11 def initialize @jobs = [] @current_job = nil end
公開實例方法
delete(key) 按一下以切換來源
刪除給定 key
的工作。
# File lib/irb/ext/multi-irb.rb, line 115 def delete(key) case key when Integer fail NoSuchJob, key unless @jobs[key] @jobs[key] = nil else catch(:EXISTS) do @jobs.each_index do |i| if @jobs[i] and (@jobs[i][0] == key || @jobs[i][1] == key || @jobs[i][1].context.main.equal?(key)) @jobs[i] = nil throw :EXISTS end end fail NoSuchJob, key end end until assoc = @jobs.pop; end unless @jobs.empty? @jobs.push assoc end
insert(irb) 按一下以切換來源
將給定的 irb
會話加入工作 Array
。
# File lib/irb/ext/multi-irb.rb, line 50 def insert(irb) @jobs.push [Thread.current, irb] end
inspect() 按一下以切換來源
輸出工作清單,請參閱 irb 指令 irb_jobs
或 jobs
。
# File lib/irb/ext/multi-irb.rb, line 139 def inspect ary = [] @jobs.each_index do |i| th, irb = @jobs[i] next if th.nil? if th.alive? if th.stop? t_status = "stop" else t_status = "running" end else t_status = "exited" end ary.push format("#%d->%s on %s (%s: %s)", i, irb.context.irb_name, irb.context.main, th, t_status) end ary.join("\n") end
irb(key) 按一下以切換來源
傳回給定 key
物件的 irb 會話,請參閱 search
以取得更多資訊。
# File lib/irb/ext/multi-irb.rb, line 34 def irb(key) _, irb = search(key) irb end
kill(*keys) 按一下以切換來源
終止由給定 keys
指定的 irb 會話。
如果給定的其中一個 keys
已終止,則會引發 IrbAlreadyDead 例外。
請參閱 Thread#exit
以取得更多資訊。
# File lib/irb/ext/multi-irb.rb, line 77 def kill(*keys) for key in keys th, _ = search(key) fail IrbAlreadyDead unless th.alive? th.exit end end
main_irb() 按一下以切換來源
傳回頂層 irb 會話。
# File lib/irb/ext/multi-irb.rb, line 45 def main_irb @jobs[0][1] end
main_thread() 按一下以切換來源
傳回頂層執行緒。
# File lib/irb/ext/multi-irb.rb, line 40 def main_thread @jobs[0][0] end
n_jobs() 按一下以切換來源
irb 會話的總數,用於設定目前 Context
的 irb_name
。
# File lib/irb/ext/multi-irb.rb, line 21 def n_jobs @jobs.size end
search(key) 按一下以切換來源
傳回給定 key
的相關聯工作。
如果給定 Integer
,它將傳回工作 Array
的 key
索引。
當給定 Irb
的執行個體時,它將傳回與 key
相關聯的 irb 會話。
如果給定 Thread
的執行個體,它將使用工作 Array
上的 Object#===
傳回相關聯的執行緒 key
。
否則傳回與給定的 key
具有相同頂層繫結的 irb 會話。
如果找不到具有給定 key
的工作,則會引發 NoSuchJob 例外。
# File lib/irb/ext/multi-irb.rb, line 99 def search(key) job = case key when Integer @jobs[key] when Irb @jobs.find{|k, v| v.equal?(key)} when Thread @jobs.assoc(key) else @jobs.find{|k, v| v.context.main.equal?(key)} end fail NoSuchJob, key if job.nil? job end
switch(key) 按一下以切換來源
將目前的活動 irb 會話變更為工作 Array
中給定的 key
。
如果給定的 key
已不再運作,則會引發 IrbAlreadyDead 例外。
如果給定的 irb 會話已處於活動狀態,則會引發 IrbSwitchedToCurrentThread 例外。
# File lib/irb/ext/multi-irb.rb, line 61 def switch(key) th, irb = search(key) fail IrbAlreadyDead unless th.alive? fail IrbSwitchedToCurrentThread if th == Thread.current @current_job = irb th.run Thread.stop @current_job = irb(Thread.current) end
thread(key) 按一下以切換來源
傳回給定 key
物件的執行緒,如需更多資訊,請參閱 search
。
# File lib/irb/ext/multi-irb.rb, line 27 def thread(key) th, = search(key) th end