Если я добавлю мета-метод к классу, я ожидаю, что он появится в Class.metaClass.metaMethods
. Но, похоже, это не так. В частности, если я сделаю это:
class Example {
def realFoo() { "foo" }
}
Example.metaClass.metaFoo = { -> "foo" }
def reals = Example.metaClass.methods*.name.grep{it.contains("Foo")}
def metas = Example.metaClass.metaMethods*.name.grep{it.contains("Foo")}
println "reals = $reals, metas = $metas"
, я бы ожидал вывода reals = [realFoo], metas = [metaFoo]
, но на самом деле я получаю reals = [realFoo, metaFoo], metas = []
.
Похоже, что новые мета-методы хранятся в методах, а не в metaMethods. Итак, в чем разница между metaClass.methods
и metaClass.metaMethods
?