1

我创建了一个类:NumberHelper

它有方法:roll(num)

我想给它起别名,比如rollOnce,所以我写道:

static def rollOnce = NumberHelper.&roll

当我调用rollOnce. 如何在 groovy 中做到这一点?

更多详情:

首先,我们为自己的业务实现 Number 类,用 Java

    def userBuildScript = findScript(name) as Closure
    use (NumberHelper, StringHelper, UserHelper){
        // first make the user object
        // then
        userBuildScript.call(preBuildUser, businessNumberObject)
    }

我们为我们的 Number 类写了一个类别类,就是上面的 NumberHelper。

并在构建脚本中:

    user(someRole) { user, number ->
         it.someProperty = number.roll() // here, an exception throw
    }


    groovy.lang.MissingMethodException: No signature of method: xxx.xx.x.user.biz.Number,roll() is applicable for argument types

这些信息是否足以帮助我找到原因?

并感谢您的回答,谢谢:)

4

1 回答 1

0

只要原始的滚动方法也是静态的,您所拥有的就应该起作用。这在 groovy 1.8.6 中对我来说很好:

class NumberHelper {
    static def roll(num) {
        return new Random().nextInt(num) + 1
    }

    static def rollOnce = NumberHelper.&roll
}

def roll = NumberHelper.roll(6)
assert roll <= 6 && roll >= 1

rollOnce = NumberHelper.rollOnce(10)
assert rollOnce <= 10 && rollOnce >= 1
于 2012-06-13T13:11:26.463 回答