「外部」クラス (実際には外部クラスではない) への参照が必要です。
コードをファイルに記述していると仮定すると、とのScript.groovy
2 つのクラスが生成されます。メソッドが定義されている場所がわからないため、メソッドを呼び出す方法はありません。C.class
Script.class
C
f()
いくつかのオプションがあります:
1) @MichaelEasterのアイデア、現在のスコープからメタクラス定義を与える(つまりScript
)
2)Script
内部でオブジェクトを作成/渡すC
:
def f() { "f" }
class C
{
public h(s = new Script()) { s.f() }
}
assert "f" == new C().h()
3)内部C
クラスを作成します (次のインスタンスも必要ですScript
:
class Script {
def f() { "f" }
class C
{
public h() { f() }
}
static main(args) {
assert "f" == new C(new Script()).h()
}
}
4) static 内部クラスと static f()
:
class Script {
static def f() { "f" }
static class C
{
public h() { f() }
}
static main(args) {
assert "f" == new C().h()
}
}