类 XMP::StringInputMethod

一个自定义的 InputMethod 类,用于 XMP 评估字符串 io。

属性

encoding[R]

返回 puts 打印的最后一个表达式的编码。

公共类方法

new() 点击切换源代码

创建一个新的 StringInputMethod 对象

调用超类方法 BasicObject::new
# File lib/irb/xmp.rb, line 96
def initialize
  super
  @exps = []
end

公共实例方法

eof?() 点击切换源代码

此打印机中是否还有表达式。

# File lib/irb/xmp.rb, line 102
def eof?
  @exps.empty?
end
gets() 点击切换源代码

从此打印机中读取下一个表达式。

有关更多信息,请参阅 IO#gets

# File lib/irb/xmp.rb, line 109
def gets
  while l = @exps.shift
    next if /^\s+$/ =~ l
    l.concat "\n"
    print @prompt, l
    break
  end
  l
end
puts(exps) 点击切换源代码

将此打印机中的所有表达式连接起来,用换行符分隔。

如果给定 exps 的编码与之前评估的表达式的编码不匹配,则会引发 Encoding::CompatibilityError

# File lib/irb/xmp.rb, line 123
def puts(exps)
  if @encoding and exps.encoding != @encoding
    enc = Encoding.compatible?(@exps.join("\n"), exps)
    if enc.nil?
      raise Encoding::CompatibilityError, "Encoding in which the passed expression is encoded is not compatible to the preceding's one"
    else
      @encoding = enc
    end
  else
    @encoding = exps.encoding
  end
  @exps.concat exps.split(/\n/)
end