Wouldn't that invert the return order?

```ruby
class Class
  def descendants_old
    descendants = []
    ObjectSpace.each_object(singleton_class) do |k|
      descendants.unshift k unless k == self
    end
    descendants
  end

  def descendants_new
    ObjectSpace.each_object(singleton_class).reject do |k|
      k == self
    end
  end
end

class X; end
class W < X; end
class Y < X; end
class Z < Y; end

def puts_descendants(k)
  puts k.name, k.descendants_old.inspect, k.descendants_new.inspect
end

puts_descendants X
puts_descendants Y
puts_descendants Z

=begin
X
[W, Y, Z]
[Z, Y, W]
Y
[Z]
[Z]
Z
[]
[]
=end
```