2013-07-08 25 views
5

Sono esperto in Python ma un noob in Scala. Sto per scrivere un codice di esperimento sporco in Scala, e mi sono reso conto che sarebbe davvero utile se Scala avesse una funzione come help() in Python. Ad esempio, se volessi vedere i metodi incorporati per Scala Array, potrei voler digitare qualcosa come help(Array), proprio come se scrivessi help(list) in Python. Esiste una cosa del genere per Scala?Equivalente Scala di Python help()

+1

scheda completamento nel REPL? – sschaef

risposta

4

Non so di un built-in ma è necessario utilizzare Scaladocs per trovare le stesse informazioni.

A meno che non si usi eclissi che ha un auto completo con brevi spiegazioni. Ad esempio, ti fornirà tutti i comandi per gli array dopo aver digitato 'array.'.

+0

Grazie! Non sono ancora sicuro di come usare Scaladocs, ma lo scoprirò. – Ray

+0

Quello che faccio normalmente è solo google il metodo e gli scaladoc. Uno dei primi collegamenti di coppia avrà quello che stai cercando. – brebs

1

Analogamente, IDEA ha il comando "Quick Documentation Look-up", che funziona per JARs Scala e Java (-Doc) e per i commenti alla documentazione del codice sorgente.

3

Penso che il completamento delle schede sia la cosa più vicina all'aiuto di Python.

C'è anche un datato ma ancora rilevante post da @dcsobral su utilizzando la documentazione di Scala e Scalex che è simile a Hoogle per Haskell.

Questo è il completamento della scheda nello ObjectArray.

scala> Array. 
apply     asInstanceOf   canBuildFrom   concat     copy     
empty     emptyBooleanArray  emptyByteArray   emptyCharArray   emptyDoubleArray  
emptyFloatArray  emptyIntArray   emptyLongArray   emptyObjectArray  emptyShortArray   
fallbackCanBuildFrom fill     isInstanceOf   iterate    newBuilder    
ofDim     range     tabulate    toString    unapplySeq 

Questo è per i metodi sulla classe Array. Non capisco perché questo non mostra i membri di valore dopo a.

scala> val a = Array(1,2,3) 
a: Array[Int] = Array(1, 2, 3) 

scala> a. 
apply   asInstanceOf clone   isInstanceOf length   toString  update 

Anche se un po 'scoraggiante al completamento scheda volte su un metodo mostra le firme dei metodi. Qui è per Array.fill

def fill[T](n1: Int, n2: Int)(elem: => T)(implicit evidence$10: reflect.ClassTag[T]): Array[Array[T]]             
def fill[T](n1: Int, n2: Int, n3: Int)(elem: => T)(implicit evidence$11: reflect.ClassTag[T]): Array[Array[Array[T]]]         
def fill[T](n1: Int, n2: Int, n3: Int, n4: Int)(elem: => T)(implicit evidence$12: reflect.ClassTag[T]): Array[Array[Array[Array[T]]]]     
def fill[T](n1: Int, n2: Int, n3: Int, n4: Int, n5: Int)(elem: => T)(implicit evidence$13: reflect.ClassTag[T]): Array[Array[Array[Array[Array[T]]]]] 
def fill[T](n: Int)(elem: => T)(implicit evidence$9: reflect.ClassTag[T]): Array[T] 
+0

Il completamento della scheda non include i membri aggiunti tramite impliciti. Tuttavia, tabding è spesso più semplice di me per lo scaladoc (mi viene in mente una riflessione). –

+0

Il completamento della scheda Hmmm sembra meno elegante di 'help()' di Python, ma immagino che serva al suo scopo. Grazie! – Ray

1

sbt-man è un plugin sbt per la ricerca di scaladoc. Il comando SBT console inizia la Scala REPL con le classi del progetto e le dipendenze sul classpath

Esempio:

man Traversable /: 
[man] scala.collection.Traversable 
[man] def /:[B](z: B)(op: (B ⇒ A ⇒ B)): B 
[man] Applies a binary operator to a start value and all elements of this 
collection, going left to right. Note: /: is alternate syntax for foldLeft; 
z /: xs is the same as xs foldLeft z. Note: will not terminate for infinite- 
sized collections. Note: might return different results for different runs, 
unless the underlying collection type is ordered. or the operator is 
associative and commutative.