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