ExpandoMetaClass по умолчанию не используется. Например:
Object.metaClass.puts = {obj->
println obj
}
puts "hello"
Мы увидим MissingMethodException. Т.е. вся иерархия классов не получает данный метод, только Object. Однако если мы напишем:
Integer.metaClass
То все объекты класса Integer будут использовать ExpandoMetaClass и начнут понимать puts:
5.puts “yes”
Но что, если мы не хотим перечислять все классы в которые мы хотим добавить наш метод?
Для этого мы используем:
ExpandoMetaClass.enableGlobally()
После чего:
puts “hello”
будет работать везде