[ruby-trunk - Bug #10276] [Feedback] nil/true/false に singleton メソッドを定義できてしまう

Issue #10276 has been updated by Akira T…

Status changed from Open to Feedback

開発者会議のときに、奇妙だがそういうものとしようということになった覚えがあります。


Bug #10276: nil/true/false に singleton メソッドを定義できてしまう

  • Author: Kazuhiro NISHIYAMA
  • Status: Feedback
  • Priority: Normal
  • Assignee:
  • Category: core
  • Target version: current: 2.2.0
  • ruby -v: ruby 2.2.0dev (2014-09-21 trunk 47672) [x86_64-linux]
  • Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN

nil/true/false が frozen object なのに singleton メソッドを定義できてしまいます。

% cat /tmp/f.rb
def d(o)
  p o.frozen?
  def o.m; end
rescue
  p [o, $!]
end
d(:sym)
d(1)
d(nil)
d(true)
d(false)
d(Object.new.freeze)
% ruby -v /tmp/f.rb
ruby 2.2.0dev (2014-09-21 trunk 47672) [x86_64-linux]
true
[:sym, #<TypeError: can't define singleton>]
true
[1, #<TypeError: can't define singleton>]
true
true
true
true
[#<Object:0x00000002706730>, #<RuntimeError: can't modify frozen 
object>]