类 XMP

用于 irb 的示例打印机。

它与标准库中的 PrettyPrint 非常相似,它在运行时显示每个表达式的值。

要使用此库,您必须先加载它

require 'irb/xmp'

现在,您可以利用 Object#xmp 方便方法。

xmp <<END
  foo = "bar"
  baz = 42
END
#=> foo = "bar"
  #==>"bar"
#=> baz = 42
  #==>42

您还可以创建一个 XMP 对象,并可选地绑定到在给定绑定中打印表达式

ctx = binding
x = XMP.new ctx
x.puts
#=> today = "a good day"
  #==>"a good day"
ctx.eval 'today # is what?'
#=> "a good day"

公共类方法

new(bind = nil) 点击切换源代码

创建一个新的 XMP 对象。

在创建工作区时,将使用顶级绑定或可选的 bind 参数。有关更多信息,请参阅 WorkSpace.new。

这使用 :XMP 提示模式。有关更多信息,请参阅 自定义提示

# File lib/irb/xmp.rb, line 49
def initialize(bind = nil)
  IRB.init_config(nil)

  IRB.conf[:PROMPT_MODE] = :XMP

  bind = IRB::Frame.top(1) unless bind
  ws = IRB::WorkSpace.new(bind)
  @io = StringInputMethod.new
  @irb = IRB::Irb.new(ws, @io)
  @irb.context.ignore_sigint = false

  IRB.conf[:MAIN_CONTEXT] = @irb.context
end

公共实例方法

puts(exps) 点击切换源代码

评估给定的 exps,例如

require 'irb/xmp'
x = XMP.new

x.puts '{:a => 1, :b => 2, :c => 3}'
#=> {:a => 1, :b => 2, :c => 3}
  # ==>{:a=>1, :b=>2, :c=>3}
x.puts 'foo = "bar"'
# => foo = "bar"
  # ==>"bar"
# File lib/irb/xmp.rb, line 74
def puts(exps)
  @io.puts exps

  if @irb.context.ignore_sigint
    begin
      trap_proc_b = trap("SIGINT"){@irb.signal_handle}
      catch(:IRB_EXIT) do
        @irb.eval_input
      end
    ensure
      trap("SIGINT", trap_proc_b)
    end
  else
    catch(:IRB_EXIT) do
      @irb.eval_input
    end
  end
end