irb终止,没有方法错误

时间:2014-08-29 16:12:00

标签: ruby irb

当我在irb中输入以下行时,irb终止。

$ irb
irb(main):001:0> def !; end
=> :!
irb(main):002:0> !
/usr/local/lib/ruby/2.1.0/irb/input-method.rb:153:in `gets': private method `!' called for false:FalseClass (NoMethodError)
...
$

撇开定义或调用名为!的方法是否有效的问题,我认为即使出现错误,irb也不应该退出。这是一个错误吗?你知道是什么原因造成的吗?

1 个答案:

答案 0 :(得分:2)

将此代码放在文件中:

def !;
  puts "Hi"
end

send(:!)

!();

Ruby(1.9.3)给出了这个:

Hi
testexclaim.rb:7:in `<main>': private method `!' called for nil:NilClass (NoMethodError)

在我的1.9.3 IRB中,似乎是在解释!作为not运算符,即使是括号。

在我看来,因为send有效,所以这比任何其他IRB和Ruby都无法处理的解析错误更多。