воскресенье, 23 марта 2008 г.

Enable Globally

ExpandoMetaClass по умолчанию не используется. Например:




Object.metaClass.puts = {obj->
println obj
}

puts "hello"


Мы увидим MissingMethodException. Т.е. вся иерархия классов не получает данный метод, только Object. Однако если мы напишем:



Integer.metaClass


То все объекты класса Integer будут использовать ExpandoMetaClass и начнут понимать puts:



5.puts “yes”

Но что, если мы не хотим перечислять все классы в которые мы хотим добавить наш метод? Для этого мы используем:



ExpandoMetaClass.enableGlobally()


После чего:
puts “hello”
будет работать везде

Комментариев нет: