2012-05-06 10 views
9

Mientras trabajaba en la "Scala for the Impa- ratient" de Cay S. Horstmann, noté algo interesante revelado por el primer ejercicio en el primer capítulo.¿Qué información de la pestaña de Scala REPL me está diciendo aquí?

  1. En la Scala REPL, tipo 3. seguido de la tecla Tab. ¿Qué métodos se pueden aplicar?

Cuando hago esto, me sale el siguiente

 
scala> 3. 
%    &    *    +    -   /    
>    >=    >>    >>>   ^   asInstanceOf 
isInstanceOf toByte   toChar   toDouble  toFloat  toInt   
toLong   toShort  toString  unary_+  unary_-  unary_~   
|  

pero me di cuenta de que si golpeo Tab por segunda vez, me sale una lista ligeramente diferente.

 
scala> 3. 
!=    ##    %    &    *    +    
-   /       >=    >>    >>>   ^   asInstanceOf 
equals   getClass  hashCode  isInstanceOf toByte   toChar   
toDouble  toFloat  toInt   toLong   toShort  toString  
unary_+  unary_-  unary_~  |  

¿Qué es el REPL tratando de decirme aquí? ¿Hay algo especial sobre los diferentes métodos que aparecen la segunda vez?

Respuesta

11

pestaña Golpear dos veces en el REPL raises the verbosity of the completion:

Si "methodName" se encuentra entre z 's terminaciones, y verbosity > 0 indicando pestaña se ha pulsado dos veces consecutivas, entonces llamamos alternativesFor y mostrar una lista de firmas de método sobrecargadas.

Los siguientes métodos de la interpreter source indican lo que se filtra para la terminación método cuando verbosity == 0 (es decir, cuando se ha golpeado ficha de sólo una vez y no está recibiendo la versión alternativesFor):

def anyRefMethodsToShow = Set("isInstanceOf", "asInstanceOf", "toString") 

def excludeEndsWith: List[String] = Nil 

def excludeStartsWith: List[String] = List("<") // <byname>, <repeated>, etc. 

def excludeNames: List[String] = 
    (anyref.methodNames filterNot anyRefMethodsToShow) :+ "_root_" 

def exclude(name: String): Boolean = (
    (name contains "$") || 
    (excludeNames contains name) || 
    (excludeEndsWith exists (name endsWith _)) || 
    (excludeStartsWith exists (name startsWith _)) 
) 

Así que con En una pestaña, obtiene los métodos filtrados por algunas reglas que los desarrolladores de los intérpretes han decidido son razonables y útiles. Dos pestañas te dan la versión sin filtro.

Cuestiones relacionadas