【问题标题】:irb terminates with no method errorirb 终止,没有方法错误
【发布时间】:2014-10-23 16:37:30
【问题描述】:

当我在 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 也不应该退出。这是一个错误吗?你知道这是什么原因吗?

【问题讨论】:

标签: ruby irb


【解决方案1】:

在文件中使用此代码:

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 中,它似乎在解释 !作为非运算符,即使有括号。

在我看来,因为 send 有效,这更像是一个解析错误,而不是 IRB 和 Ruby 都无法处理的任何其他问题。

【讨论】:

  • 谢谢,我刚刚向 ruby​​ trunk 发布了一个错误报告,链接在上面的评论中。
  • @sawa:好的。我不确定是否有人会认为修复它很重要 - 如果真正的代号命名某些东西!,他们会有更大的问题。
  • 要么他们应该禁止这样的名称,要么正常工作。就像你说的那样,它的优先级可能很低。但它仍然应该修复。
  • 其实在Ruby 2中,方法!是否定的,是public的。
  • @sawa:哦!我没有意识到他们把它变成了可覆盖的。
猜你喜欢
  • 2013-07-24
  • 2020-12-21
  • 2014-09-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多