类 IRB::Frame

常量

CALL_STACK_OFFSET

默认帧偏移数量

INIT_STACK_TIMES

默认堆栈帧数量

公共类方法

bottom(n = 0) 点击切换源代码

Frame#bottom 的便捷方法

# File lib/irb/frame.rb, line 61
def Frame.bottom(n = 0)
  @backtrace.bottom(n)
end
new() 点击切换源代码

创建一个新的堆栈帧

# File lib/irb/frame.rb, line 26
def initialize
  @frames = [TOPLEVEL_BINDING] * INIT_STACK_TIMES
end
sender() 点击切换源代码

返回从最后一个初始化的帧调用的绑定上下文

# File lib/irb/frame.rb, line 71
def Frame.sender
  eval "self", @backtrace.top
end
top(n = 0) 点击切换源代码

Frame#top 的便捷方法

# File lib/irb/frame.rb, line 66
def Frame.top(n = 0)
  @backtrace.top(n)
end

公共实例方法

bottom(n = 0) 点击切换源代码

返回从第一个初始化的帧开始的调用堆栈上的 n 个帧。

如果给定堆栈范围内没有帧,则引发 FrameOverflow

# File lib/irb/frame.rb, line 54
def bottom(n = 0)
  bind = @frames[n]
  fail FrameOverflow unless bind
  bind
end
top(n = 0) 点击切换源代码

返回从最后一个初始化的帧开始的调用堆栈上的 n 个帧。

如果给定堆栈范围内没有帧,则引发 FrameUnderflow

# File lib/irb/frame.rb, line 44
def top(n = 0)
  bind = @frames[-(n + CALL_STACK_OFFSET)]
  fail FrameUnderflow unless bind
  bind
end
trace_func(event, file, line, id, binding) 点击切换源代码

Kernel#set_trace_func 用于在调用堆栈中注册每个事件

# File lib/irb/frame.rb, line 31
def trace_func(event, file, line, id, binding)
  case event
  when 'call', 'class'
    @frames.push binding
  when 'return', 'end'
    @frames.pop
  end
end