RubyのModule#includeで引数を複数指定すると逆順で追加される
Module#include は引数に複数のモジュールを受け取ることができる。
しかし、以下のサンプルコードで分かるように、モジュールの順序は3行で書いたものと逆になるので注意がいる。
module A; end module B; end module C; end class Foo include A include B include C end class Bar include A, B, C end p Foo.ancestors #=> [Foo, C, B, A, Object, Kernel, BasicObject] p Bar.ancestors #=> [Bar, A, B, C, Object, Kernel, BasicObject]
include を触っていた初めて知った挙動なので、ブログにメモっておく。