2009-12-21 15 views

Respuesta

18

Debido [ "[email protected]"] evalúa a un ArrayList, no una matriz:

groovy:000> o = ["asdf"] 
===> [asdf] 
groovy:000> o.getClass() 
===> class java.util.ArrayList 

otoh su declaración crea una matriz de objetos:

groovy:000> Object[] args = ["asdf"] 
===> [Ljava.lang.Object;@14e113b 

yt El método que estás llamando necesita una matriz. Puede crear una matriz usando as:

Object[] args = ["asdf"] as Object[] 

Los creadores hicieron un maravilloso punto de hacer que las estructuras de datos de alto nivel como las listas idiomáticas, mientras que las matrices están presentes para la interoperabilidad con Java.

En su entrevista en codificadores en el Trabajo de Guy Steele habla de elecciones hechas en el diseño de un lenguaje:.

"Hay un problema de codificación de Huffman Si haces algo conciso, algo va a tener que Por lo tanto, en diseñando un idioma, una de las cosas que piensas es, '¿Cuáles son las cosas que quiero hacer muy fácil de decir y muy fácil de obtener ¿verdad?' Pero en el entendimiento de que, habiendo usado caracteres o símbolos para ese propósito, vas a tener que hacer algo más un poco más difícil de decir ".

Parece ciertamente que las listas de Groovy fueron más concisas, con el efecto secundario de que las matrices se volvieron más prolijas.

+0

tiene sentido, pero parece que el método complicado de usar, supongo que esperaba que fuera más "maravilloso" –

+1

Se podría cambiarlo a ["[email protected]"]. toArray(). No mucho mejor, pero al menos está en línea. –

1

Nathan ya explicó (correctamente) el motivo de este comportamiento en el nivel de idioma. Solo quiero mover un nivel de abstracción hacia arriba: ¿por qué estás usando Spring's MessageSource directamente, en primer lugar? En Grails hay un message tag, que envuelve la fuente del mensaje:

g.message(code: 'UserService.msg.forgot.unknown', args: ["[email protected]"])