This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.

Undefining a Method
CodeExpectedActual
class RandomizingArray < Array
  def <<(e)
    insert(rand(size), e)   
  end
  def [](i)
    super(rand(size))
  end
end
a = RandomizingArray.new
a << 1 << 2 << 3 << 4 << 5 << 6
[6, 3, 4, 5, 2, 1] [6, 3, 4, 5, 2, 1]
a[0]
1 1
a[0]
2 2
a[0]
5 5
#No, seriously, a[0].
a[0]
4 4
#It's a madhouse! A madhouse!
a[0]
3 3
#That does it!
class RandomizingArray
  remove_method('[]')
end
a[0]
6 6
a[0]
6 6
a[0]
6 6
a << 7
[6, 3, 4, 7, 5, 2, 1] [6, 3, 4, 7, 5, 2, 1]
class RandomizingArray
  remove_method(:length)
end
NameError: method `length' not defined in RandomizingArray
...
NameError: method `length' not defined in RandomizingArray
	from (irb):27:in `remove_method'
	from (irb):27
class RandomizingArray
  undef_method(:length)
end
RandomizingArray.new.length                
NoMethodError: undefined method `length' for []:RandomizingArray
...
NoMethodError: undefined method `length' for []:RandomizingArray
	from (irb):32
Array.new.length
0 0
my_array = Array.new
def my_array.random_dump(number)
  number.times { self << rand(100) }
end
my_array.random_dump(3)
my_array.random_dump(2)
my_array
[6, 45, 12, 49, 66] [6, 45, 12, 49, 66]
class << my_array
  remove_method(:random_dump)
end
my_array.random_dump(4)
NoMethodError: undefined method `random_dump' for [6, 45, 12, 49, 66]:Array
...
NoMethodError: undefined method `random_dump' for [6, 45, 12, 49, 66]:Array
	from (irb):44
class OneTimeContainer
  def initialize(value)
    @use_just_once_then_destroy = value
  end
  def get_value
    remove_instance_variable(:@use_just_once_then_destroy)    
  end
end
object_1 = OneTimeContainer.new(6)
object_1.get_value
6 6
object_1.get_value
NameError: instance variable @use_just_once_then_destroy not defined
...
NameError: instance variable @use_just_once_then_destroy not defined
	from (irb):50:in `remove_instance_variable'
	from (irb):50:in `get_value'
	from (irb):55
object_2 = OneTimeContainer.new('ephemeron')
object_2.get_value
"ephemeron" "ephemeron"
class MyClass
  remove_instance_variable(:@use_just_once_then_destroy)    
end
NameError: instance variable @use_just_once_then_destroy not defined
...
NameError: instance variable @use_just_once_then_destroy not defined
	from (irb):59:in `remove_instance_variable'
	from (irb):59