类 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