Como vejo código Scala sem todo o açúcar sintático?

5

Eu tenho estudado Scala, mas o que eu continuo procurando é a otimização da sintaxe. Tenho certeza de que será ótimo quando eu for um especialista, mas até então ... Não muito.

Existe um comando ou um programa que seria adicionado em todos / na maioria dos códigos que foram otimizados? Então eu seria capaz de ler os exemplos, por exemplo.

    
por Paul 11.08.2011 / 03:55
fonte

1 resposta

8

Você pode usar -print ao compilar o Scala e imprimir uma versão sem açúcar do código. Infelizmente, você verá que o Scala tem açúcar sintático por um bom motivo.

Vamos ver um exemplo muito simples:

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

E a saída:

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();
      ()
    }
  }
}

Você verá coisas como <empty> - estas são as anotações do compilador, e não o código Scala válido. Por exemplo, um parâmetro em uma classe de caso terá seu getter marcado com <stable> <caseaccessor> <accessor> <paramaccessor> . Além disso, uma classe de caso terá vários métodos marcados com <synthetic> , para indicar que eles foram criados pelo compilador.

Além disso, o construtor this que você vê aqui não é um código Scala válido, exatamente. Nesse caso, o construtor "normal" do Scala (que é o corpo do class , trait ou object ) é movido dentro desse método this - que é como o próprio Java vê as coisas.

Então, isso é mistura de Scala e Java, com um pouco de componentes internos do compilador sobre ele. Mas mostrará o material sem açúcar.

    
por 11.08.2011 / 19:28
fonte

Tags