i figure has simple answer, web searching couldn't find it.
if i've got following (ideone):
def f() {} class c { public h() { f() } } x = (new c()).h();
this fails following error:
no signature of method: c.f() applicable argument types: () values: []
how call f()
inside method of c
?
you need reference "outer" class (which isn't outer class).
assuming writing code in script.groovy
file, generates 2 classes: c.class
, script.class
. there no way c
call f()
method, since has no idea defined.
you have options:
1) @michaeleaster's idea, giving metaclass defition current scope (i.e. script
)
2) create/pass script
object inside c
:
def f() { "f" } class c { public h(s = new script()) { s.f() } } assert "f" == new c().h()
3) make c
inner class (which needs instance of script
:
class script { def f() { "f" } class c { public h() { f() } } static main(args) { assert "f" == new c(new script()).h() } }
4) static inner class plus static f()
:
class script { static def f() { "f" } static class c { public h() { f() } } static main(args) { assert "f" == new c().h() } }
Comments
Post a Comment