2010-09-04 13 views
25

In un'esercitazione Groovy, io incontrato il seguente codice:Qual è l'operatore groovy << in questo contesto?

class DateTagLib { 
    def thisYear = { 
    out << Calendar.getInstance().get(Calendar.YEAR) 
    } 
} 

Io non so quale sia il << mezzi, e sto avendo nessuna fortuna con google.

Modifica: Ora so che << a volte è un po 'spostato. Ma cosa significa qui?

+0

Senza aver visto una linea di Groovy in tutta la mia vita, sembra che "out << foo' potrebbe essere sintassi per" return foo ". O fuori è una specie di oggetto con un sovraccarico funky che risulta nella stessa cosa, cioè l'operatore '<<' sull'oggetto 'out' restituisce semplicemente il suo valore di parametro ... –

+0

sembra un '<< =' sarebbe più appropriato qui ma non lo capisco davvero. – djangofan

risposta

46

In Groovy, gli operatori bit a bit possono essere ignorati con i metodi leftShift (<<) e rightShift (>>) definiti sulla classe. È idiota groovy usare il metodo leftShift per aggiungere azioni su stringhe, buffer, flussi, matrici, ecc. E questo è quello che vedi qui.

Ad esempio:

  • I overload leftShift metodi su OutputStream che vengono utilizzati per aggiungere byte, un InputStream, o un Object al flusso.
  • List, che utilizza anche come un accodamento

State guardando un tag graal lib, quindi rappresenta la pagina che viene reso. I risultati di questo taglib verranno aggiunti al buffer di output che verrà reso al client.

5

Supponendo che out è System.out l'operatore < < scrive fuori in questo caso. L'idioma da sovraccaricare < < per l'output (scrittura su un flusso) e >> per l'input (lettura da un flusso) proviene da C++. Quando le librerie stdio (istream ostream, ecc.) Sono state definite, è nata l'idea di utilizzare shift a sinistra e shift a destra per output e input.

Problemi correlati