類別 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_jobsjobs

# 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 會話的總數,用於設定目前 Contextirb_name

# File lib/irb/ext/multi-irb.rb, line 21
def n_jobs
  @jobs.size
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