Issue #11878 has been updated by Eregon (Benoit Daloze).

Status changed from Rejected to Open

At the very least it's inconsistent with the order of Module#ancestors:
```ruby
module M; end
class C; prepend M; end

> C.ancestors
=> [M, C, Object, JSON::Ext::Generator::GeneratorMethods::Object, PP::ObjectMixin, Kernel, BasicObject]
> C < Object
=> true
> M < C
=> false
> C < M
=> true
```

I think no user expects that the "subclass relation" is different than the order of ancestors, isn't it? (and why would it need to be?)
Also, the documentation says nothing about modules or this ad-hoc order which nothing else seems to use.

I think this is a bug and I'd like matz's ruling.

----------------------------------------
Bug #11878: Comparison of prepended modules
https://bugs.ruby-lang.org/issues/11878#change-83359

* Author: sawa (Tsuyoshi Sawada)
* Status: Open
* Priority: Normal
* Assignee: matz (Yukihiro Matsumoto)
* Target version: 
* ruby -v: 2.3.0p0 (2015-12-25 revision 53290) [x86_64-linux]
* Backport: 2.0.0: REQUIRED, 2.1: REQUIRED, 2.2: REQUIRED, 2.3: REQUIRED
----------------------------------------
Including module `B` to class/module `A` gives the following results (as expected):

~~~ruby
module A; end
module B; end
A.include B
A < B # => true
B < A # => false
A <=> B # => -1
~~~

And prepending module `C` to `A` gives the following results:

~~~ruby
module C; end
A.prepend C
A < C # => true
C < A # => nil
A <=> C # => -1
~~~

It looks like including and prepending almost do not make difference with respect to module comparison, i.e., `A < B` and `A < C` are the same, and `A <=> B` and `A <=> C` are the same. However, then, the difference between `B < A` and `C < A` stands out unexplained. I suppose this is a bug. If `C < A` were to return `false`, then it would be at least consistent.

However, if that was what was intended, then at least to me, it is strange. In that case, I would like to make this a feature request. I would rather expect:

~~~ruby
A < C # => false
C < A # => true
A <=> C # => 1
~~~




-- 
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>