2012-02-10 10 views
8

¿Cómo puedo ver los tipos inferidos por el compilador de Scala para expresiones, etc.? Tengo un código con inferencia de tipo complicada y conversiones implícitas, y es difícil ver lo que sucede simplemente leyendo el código.Mostrar tipos inferidos de expresiones de Scala

He intentado añadir

scalacOptions in Compile += "-Xprint-types" 

en build.sbt, pero esto no tiene ningún efecto.

El uso de scalac directamente no es muy atractivo porque tengo muchas dependencias.

Uso el plugin Eclipse Scala y ENSIME para escribir el código y SBT para compilar.

Respuesta

2

¡Esta característica exacta se ha agregado en Eclipse Scala IDE 3.0!

Seleccione cualquier parte del código y presione Ctrl-Shift-W T (reemplazando Ctrl por Cmd en Mac) para ver el tipo inferido.

4

Es necesario que haya

scalacOptions in Compile ++= Seq("-Xprint-types", "-Xprint:typer") 

lugar.

Lamentablemente, la salida no es muy legible. :(

0

alzamiento de la expresión de un no local o defval, sin un tipo explícito -. Entonces aparecerá en la vista de esquema en Eclipse, con un tipo inferido asignado

Sin embargo, esto no es una solución ideal porque requiere algo de trabajo, y no se puede usar cuando se trata de recursión.

0

Estaba preparando una pregunta sobre este tema. Probablemente sea mejor que la pegue aquí (no me llame) para que esto no sea una respuesta ..).

Intenté la solución de Robin Green, pero (como usted sabe) da más salida que la requerida.

aquí va:

ser nuevo en Scala, y el mecanismo de tipo inferido, creo que a menudo sería beneficioso ser capaz de hacer algo como esto:

@spitType s= something 
... 

El imaginario spitType sería como una macro en tiempo de compilación (similar a #pragma warning en C++) que escupiría la información de tipo de la expresión en tiempo de compilación.

Sé que puedo obtener dicha información en tiempo de ejecución, pero en los casos en que el resto del código aún no se compile, un mensaje de tiempo de compilación sería lo único útil.

¿Le parece útil esta capacidad, o simplemente irrelevante?

+1

Heh, encontrado de esta manera. Hacer una variable a.a. 'val xxx: Nothing' y asigne con la expresión cuyo tipo desea saber. Siempre producirá un error ya que ningún tipo deriva de 'Nothing'. :) – akauppi

Cuestiones relacionadas