Полагаю, вы говорите о переопределении методов, а не об их переопределении, верно? Если две библиотеки перекрывают один и тот же метод в двух разных подклассах, проблем не будет.
Если две или более библиотек переопределяют один и тот же метод, то какая из них загружается в последнюю очередь. Фактически, это на самом деле ничем не отличается от простой одной библиотеки , переопределяющей метод: интерпретатор Ruby предоставляет реализацию Array#<<
для вас, и если вы переопределите ее, ваше определение выиграет просто потому, что оно появилось позже .
Лучший способ остановить это очень просто: не пытайтесь использовать существующие методы. И не используйте библиотеки, которые делают. Флаг командной строки -w
для включения предупреждений очень полезен, поскольку, по крайней мере, в Ruby 1.9.2 он выводит предупреждение, если методы переопределены.
В Ruby 2.0, вероятно, будет какой-то механизм для выделения (пере) определений методов в какое-то пространство имен. Я бы не стал затаить дыхание: об этих так называемых пространствах имен селекторов говорят в сообществе Ruby уже почти 10 лет, а в сообществе Smalltalk даже дольше, чем это, и AFAIK никто никогда не производил рабочую реализацию или даже рабочий дизайн для Ruby. Более новой идеей является идея Classboxes .