如何拦截IRB输入?

时间:2015-02-05 04:10:01

标签: ruby

是否可以拦截IRB输入?特别针对#Fixnum课程吗?

示例:

5
=> 5

我需要做的是:(伪代码)

if IRB.input.is_a?(Fixnum)
  some_method(IRB.input)  # some_method(5)
end

1 个答案:

答案 0 :(得分:0)

看看这个file。 你可以找到Irb#eval_input方法并修补它们:

# code before
@scanner.set_input(@context.io) do
  signal_status(:IN_INPUT) do
    if l = @context.io.gets
      if l.match(/^\d+$/)
        puts 'Integer found!'
      end
      print l if @context.verbose?
    else
      if @context.ignore_eof? and @context.io.readable_after_eof?
        l = "\n"
        if @context.verbose?
          printf "Use \"exit\" to leave %s\n", @context.ap_name
        end
      else
        print "\n"
      end
    end
    l
  end
end
# code after

Irb输出示例:

spark@think:~$ irb
2.1.5 :001 > 123
Integer found!
 => 123 
2.1.5 :002 > "string"
 => "string"