2011-06-26 17 views
6

¿Es posible definir un nuevo operador en Groovy? Quisiera expresar un tráfico comercial, cuando alguien compra 200 artículos por el precio de 10 como esto:¿Es posible definir un nuevo operador en Groovy?

def trade = 200 @ 10 

¿Es esta alcanzable?

Gracias

EDIT: Quiero dejar claro que estoy interesado en la definición de un operador no la adición de un método. Aclamaciones.

+3

No, actualmente esto no es posible, tiene que usar operadores existentes para definir sus propias operaciones –

+0

+ buena pregunta :) –

+0

Parece que [Spock Boys] (http://code.google.com/p/ spock/wiki/Interactions # Return_values) han logrado hacerlo con un operador '>>>' que no se menciona en la lista [Sobrecarga de operador] (http://groovy.codehaus.org/Operator+Overloading) proporcionada por [ señor. Muschko] (http://stackoverflow.com/users/528428/benjamin-muschko). ¿Alguien puede explicar cómo se puede hacer o proporcionar un NO definitivo? Tengo miedo de sentir que no puedo aceptar las respuestas actuales. Gracias por acompañarme. –

Respuesta

2

No estoy muy seguro de cómo se puede hacer este trabajo para el signo @ pero que sin duda podría añadir la operación como ésta, que en realidad encontrar más expresivo:

Number.metaClass.buyFor { Integer price -> 
    delegate * price 
} 

def result = 200.buyFor(10) 
println result 
+0

Gracias por la entrada. Lamentablemente, esto no responde mi pregunta. Soy consciente de que puedo agregar métodos a través de "parche de monos", pero realmente me gustaría definir un operador. –

+1

Parece que el signo '@' aún no se admite como [operador que se puede descargar] (http://groovy.codehaus.org/Operator+Overloading). Si puede conformarse con cualquiera de los operadores disponibles, puede implementarlo como se indicó anteriormente. –

0
Number.metaClass."@" {Integer x -> delegate * x} 

assert (2.'@' (2)) == 4 
+0

Gracias por entrar. Estás cerca, pero no tienes cigarro. Como mencioné a Ben, estoy buscando una respuesta sobre si es posible definir un nuevo OPERADOR que no agregue un método. –

6

Siempre quisimos que la capacidad para definir un operador a través del usuario en Groovy, pero hasta ahora no hemos solucionado los problemas que eso conlleva. Entonces, el estado actual es que Groovy no admite operadores personalizados, solo los que ya están en uso.

+0

Han pasado 3 años desde que se escribió esta respuesta. ¿Algún cambio en el estado de esto? – kinbiko

+1

No ... y es poco probable que cambie en el próximo año sin financiación – blackdrag

Cuestiones relacionadas