Классы Delegator
и SimpleDelegator
не являются базовыми классами, такими как Array
или Mutex
. Они являются частью стандартной библиотеки delegate
, которую необходимо загрузить в первую очередь: require 'delegate'
.
Это работало в старых Ruby версиях, так как они поставлялись со старой версией RubyGems по умолчанию. RubyGems загружается автоматически с Ruby 1.9 и до 3.1.0 , что означает, что delegate
была загружена косвенно. Обновление RubyGems или запуск ruby
с помощью --disable=gems
также должен вызвать ту же проблему с Ruby <= 2.6. <code>irb также загружает несколько стандартных библиотек: delegate
, но также timeout
и многие другие.
Языки программирования с аналогичным механизмом, как C ++, также имеют эту проблему: вместо load
/ require
есть #include
, включая стандартный заголовок библиотеки, может включать другой, тогда более новая версия может больше не включать другой заголовок, и пользовательский код, основанный на старом поведении, не компилируется.