加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

从groovy方法调用顶级函数

发布时间:2020-12-14 16:25:39 所属栏目:大数据 来源:网络整理
导读:我认为这有一个简单的答案,但我的网络搜索找不到它. 如果我有以下(ideone): def f() {}class C{ public h() { f() }}x = (new C()).h(); 此操作失败,并显示以下错误: No signature of method: c.f() is applicable for argument types: () values: [] 如何
我认为这有一个简单的答案,但我的网络搜索找不到它.

如果我有以下(ideone):

def f() {}

class C
{
    public h() { f() }
}

x = (new C()).h();

此操作失败,并显示以下错误:

No signature of method: c.f() is applicable for argument types: () values: []

如何从C方法中调用f()?

解决方法

您需要引用“外部”类(它实际上不是外部类).

假设您在Script.groovy文件中编写代码,它会生成两个类:C.class和Script.class. C调用f()方法是没有办法的,因为它不知道它在哪里被定义.

你有一些选择:

1)@ MichaelEaster的想法,给出当前范围的元类定义(即脚本)

2)在C中创建/传递一个Script对象:

def f() { "f" }

class C
{
    public h(s = new Script()) { s.f() }
}

assert "f" == new C().h()

3)使C成为内部类(也需要脚本实例:

class Script {
  def f() { "f" }

  class C
  {
      public h() { f() }
  }

  static main(args) {
    assert "f" == new C(new Script()).h()
  }
}

4)静态内部类加上静态f():

class Script {
  static def f() { "f" }

  static class C
  {
      public h() { f() }
  }

  static main(args) {
    assert "f" == new C().h()
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读