Issue #11899 has been updated by Nobuyoshi Nakada.

Status changed from Open to Rejected

It is not guaranteed.

----------------------------------------
Bug #11899: `Object#public_methods` returns unordered array in Ruby 2.3.0
https://bugs.ruby-lang.org/issues/11899#change-55885

* Author: Aleksandr Fomin
* Status: Rejected
* Priority: Normal
* Assignee: 
* ruby -v: ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
Previous ruby versions returned methods with same order. But this order was changed in Ruby 2.3.0.

Ruby 1.9.3:

```
1.9.3-p551 :001 > class B
1.9.3-p551 :002?>     def self.init
1.9.3-p551 :003?>         define_method(:f) {}
1.9.3-p551 :004?>         define_method(:b) {}
1.9.3-p551 :005?>         define_method(:c) {}
1.9.3-p551 :006?>       end
1.9.3-p551 :007?>     def a;end
1.9.3-p551 :008?>   end
 => nil 
1.9.3-p551 :009 > B.init
 => #<Proc:0x0000000217ee98@(irb):5 (lambda)> 
1.9.3-p551 :010 > B.new.public_methods(false)
 => [:a, :f, :b, :c] 
```

Ruby 2.2.0:

```
2.2.0 :007 > class B
2.2.0 :008?>   def self.init
2.2.0 :009?>     define_method(:f) {}
2.2.0 :010?>     define_method(:b) {}
2.2.0 :011?>     define_method(:c) {}
2.2.0 :012?>     end
2.2.0 :013?>   def a;end
2.2.0 :014?>   end
 => :a 
2.2.0 :015 > B.init
 => :c 
2.2.0 :016 > B.new.public_methods(false)
 => [:a, :f, :b, :c] 
```

Ruby 2.3.0:

```
2.3.0 :001 > class B
2.3.0 :002?>     def self.init
2.3.0 :003?>         define_method(:f) {}
2.3.0 :004?>         define_method(:b) {}
2.3.0 :005?>         define_method(:c) {}
2.3.0 :006?>       end
2.3.0 :007?>     def a;end
2.3.0 :008?>   end
 => :a 
2.3.0 :009 > B.init
 => :c 
2.3.0 :010 > B.new.public_methods(false)
 => [:b, :f, :a, :c] 
```



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>