Methods Groovy中的Bang方法

Methods Groovy中的Bang方法,methods,groovy,Methods,Groovy,Groovy是否有类似于Ruby上的bang方法 发件人: 在Ruby中,您可以编写名称以结尾的方法!感叹号或“砰”。关于何时以及为什么要这样做的问题,有很多困惑 这个!在以结尾的方法名称中!表示“此方法很危险”-或者更准确地说,此方法是其他等效方法的“危险”版本,具有相同的名称减去!。“危险”是相对的;这个没有任何意义,除非它所在的方法名对应于一个类似但没有太大影响的方法名* 以及: 你会发现很多方法对,一个有爆炸,一个没有。那些没有使用bang的用户执行一个操作并返回一个新创建的对象,反映操

Groovy是否有类似于Ruby上的bang方法

发件人:

在Ruby中,您可以编写名称以结尾的方法!感叹号或“砰”。关于何时以及为什么要这样做的问题,有很多困惑

这个!在以结尾的方法名称中!表示“此方法很危险”-或者更准确地说,此方法是其他等效方法的“危险”版本,具有相同的名称减去!。“危险”是相对的;这个没有任何意义,除非它所在的方法名对应于一个类似但没有太大影响的方法名*

以及:

你会发现很多方法对,一个有爆炸,一个没有。那些没有使用bang的用户执行一个操作并返回一个新创建的对象,反映操作的结果,将字符串大写,对数组排序,等等。相同方法的bang版本执行此操作,但它们在适当的位置执行此操作:它们不创建新对象,而是变换原始对象


不,groovy目前从v2.1.4开始没有类似的内容

不,groovy目前从v2.1.4开始没有类似的内容

这在groovy中不像在Ruby中那样是一种约定。但是,您可以使用包含以下字符的名称编写方法!限制条件是必须始终像字符串一样引用:

// define method with quoted name
def 'dangerous!'() {
    // do something dangerous
}

// invoke method with quoted name
'dangerous!'()

这在Groovy中不像在Ruby中那样是一种约定。但是,您可以使用包含以下字符的名称编写方法!限制条件是必须始终像字符串一样引用:

// define method with quoted name
def 'dangerous!'() {
    // do something dangerous
}

// invoke method with quoted name
'dangerous!'()

要添加到您的选项中,另一个更像Groovy或Java的解决方案是包含一个可选参数,该参数支持就地进行危险的修改,如下所示:

def processFoo(Foo item, mutate = false) {
    if(!mutate) {
        Foo temp = new Foo()
        // copy item properties
        item = temp
    }
    item.bar = 'blah blah'
    // process item here
    return item
}

processFoo(myFoo) // makes a copy
processFoo(myFoo, true) // modifies original

此模式与集合上的方法一起使用(尽管方式相反)。在列表上调用sortfalse可防止更改原始数组。调用sort或sorttrue将直接对其进行修改。

要添加到选项中,另一个更像Groovy或Java的解决方案将包括一个可选参数,该参数允许进行危险的修改,如:

def processFoo(Foo item, mutate = false) {
    if(!mutate) {
        Foo temp = new Foo()
        // copy item properties
        item = temp
    }
    item.bar = 'blah blah'
    // process item here
    return item
}

processFoo(myFoo) // makes a copy
processFoo(myFoo, true) // modifies original

此模式与集合上的方法一起使用(尽管方式相反)。在列表上调用sortfalse可防止更改原始数组。调用sort或sorttrue将直接修改它。

我确实尝试过,但调用时我没有使用字符串,所以我没有回答。谢谢你这么做我确实试过了,但打电话时我并没有使用字符串,所以我并没有回答。谢谢你这么做