Почему метод не переопределен? - PullRequest
0 голосов
/ 14 января 2012

Например, у нас есть:

module X
 def test
  "X"
 end
end

module Y
 def test
  "Y"
 end
end

class L
 include X
end

L.new.test #=> "X"

class L
 include Y
end

L.new.test #=> "Y"

class L
 include X
end

L.new.test #=> "Y"

Вот странная вещь.Почему последнее включение не изменило метод на метод X?

1 Ответ

2 голосов
/ 14 января 2012

Ruby не позволяет включать один модуль дважды, попытка сделать это второй раз просто игнорируется.

Из документации Модуль # append_features , который используется Module#include под крышками:

Реализация Ruby по умолчанию заключается в добавлении констант, методов и переменных модуля этого модуля в мод, если этот модуль еще не был добавлен в мод или одного из его предков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...