1

Groovy には、Ruby の bang メソッドに似たものがありますか?

このブログ投稿から:

Ruby では、名前が ! で終わるメソッドを記述できます。(感嘆符または「バン」)。いつ、なぜそうしたいのかという問題をめぐっては、多くの混乱があります。

!! で終わるメソッド名で は、「このメソッドは危険です」という意味です。より正確には、このメソッドは、同じ名前から ! を除いた同等のメソッドの「危険な」バージョンです。「危険」は相対的なものです。!それが入っているメソッド名が類似しているが感嘆符のないメソッド名に対応していない限り、まったく意味がありません.*

そしてこのサイト

いくつかのメソッドのペアが見つかります。1 つは強打あり、もう 1 つはなしです。強打のないものは、アクションを実行し、アクションの結果 (文字列の大文字化、配列のソートなど) を反映して、新たに作成されたオブジェクトを返します。同じメソッドの bang バージョンはアクションを実行しますが、代わりに実行します。新しいオブジェクトを作成する代わりに、元のオブジェクトを変換します。

4

3 に答える 3

3

これは、Ruby のような Groovy の規則ではありません。ただし、!常に文字列のように引用符で囲む必要があるという制限付きのように、文字を含む名前でメソッドを作成できます。

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

// invoke method with quoted name
'dangerous!'()
于 2013-06-06T16:08:09.627 に答える
1

いいえ、groovy (現在 v2.1.4 の時点) にはこのようなものはありません

于 2013-06-06T09:58:38.000 に答える
1

オプションに追加するには、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

このパターンは、反対の方法ではありますが、コレクションのsortメソッドで使用されます。s を呼び出すsort(false)List、元の配列が変更されなくなります。sort()orを呼び出すsort(true)と、直接変更されます。

于 2013-06-07T03:08:37.577 に答える