3

grails 2.1.0/groovy 1.8.6 で動作しているルーチンがいくつかありますが、grails 2.1.1/groovy 1.8.8 では動作しません。

このコードは grails 2.1.0 で実行されます。

def items = []
Object[] item = ["Fluff", new Date(), 11235813]
items << item
println items
assert !items.findAll{it[0] == "Pelusa"}
assert items.findAll{it[0] == "Fluff"}

grails 2.1.1 で実行すると、次の例外がスローされます。

groovy.lang.MissingMethodException: No signature of method: 
Script1$_run_closure1.doCall() is applicable for argument types: 
(java.lang.String, java.util.Date, java.lang.Integer) values: 
[Fluff, Wed Sep 26 01:02:23 ??? 2012, 11235813]
Possible solutions: doCall(), call(), doCall(java.lang.Object), findAll()

それはいくつかの環境情報です:

java version "1.7.0_07"
OpenJDK Runtime Environment (IcedTea7 2.3.2) (7u7-2.3.2a-0ubuntu0.12.04.1)
OpenJDK 64-Bit Server VM (build 23.2-b09, mixed mode)

どうすれば再び動作させることができますか?

編集:Groovy Console 2.0.1で問題なく動作するため、Grailsの問題である可能性があると思います

編集:バグの可能性があります。ジラの問題を提起しました。

4

1 に答える 1

0

あなたは次のようなことをするべきです

    assert !items.flatten().findAll{it[0] == "Pelusa"}
    assert items.flatten().findAll{it[0] == "Fluff"}

「items」はリストのリストなので、「it[0]」は実際には「Fluff」ではなく「item」リスト全体になります。これが古いバージョンのgrailsでは機能するのに2.1.0では機能しない理由がわかりません

于 2013-02-12T10:50:33.567 に答える