Come posso visualizzare il codice Scala senza tutto lo zucchero sintattico?

5

Ho studiato Scala, ma quello che continuo a correre è l'ottimizzazione della sintassi. Sono sicuro che sarà fantastico quando sarò un esperto, ma fino ad allora ... Non così tanto.

Esiste un comando o un programma che dovrebbe essere aggiunto in tutto / la maggior parte del codice che è stato ottimizzato via? Quindi sarei in grado di leggere gli esempi, per esempio.

    
posta Paul 11.08.2011 - 03:55
fonte

1 risposta

8

Puoi usare -print durante la compilazione di Scala, e stamperà una versione desertificata del codice. Sfortunatamente, vedrai che Scala ha zucchero sintattico per una buona ragione.

Vediamo un esempio molto semplice:

object T {
  def first[A : Ordering](l: List[A]): A = {
    val s = l.sorted
    s(0)
  }
}

E l'output:

package <empty> {
  final object T extends java.lang.Object with ScalaObject {
    def first(l: List, evidence$1: scala.math.Ordering): java.lang.Object = {
      val s: List = l.sorted(evidence$1).$asInstanceOf[List]();
      s.apply(0)
    };
    def this(): object T = {
      T.super.this();
      ()
    }
  }
}

Vedrai spesso cose come <empty> - queste sono annotazioni del compilatore, non un codice Scala valido. Ad esempio, un parametro in una classe case avrà il suo getter taggato con <stable> <caseaccessor> <accessor> <paramaccessor> . Inoltre, una classe case avrà un numero di metodi contrassegnati con <synthetic> , per indicare che sono stati creati dal compilatore.

Inoltre, il costruttore di this che vedi qui non è un codice Scala valido, esattamente. In questo caso, il costruttore di scala "normale" (che è il corpo di class , trait o object ) viene spostato all'interno di tale metodo this - che è il modo in cui Java stesso vede le cose.

Quindi, questo è un misto di Scala e Java, con un po 'di compilatore interno disseminato su di esso. Ma mostrerà la roba de-zuccherata.

    
risposta data 11.08.2011 - 19:28
fonte

Leggi altre domande sui tag