2012-12-16 17 views
9

Eventuali duplicati:
Load Scala file into interpreter to use functions?Come caricare un file scala nella console sbt?

ho avviare la console di SBT in questo modo:

[email protected]:~/projects$ sbt console 
[info] Set current project to default-8aceda (in build file:/home/alex/projects/) 
[info] Starting scala interpreter... 
[info] 
Welcome to Scala version 2.9.2 (OpenJDK Client VM, Java 1.6.0_24). 
Type in expressions to have them evaluated. 
Type :help for more information. 

scala> 

Ho un test.scala (/home/alex/projects/test.scala) file con qualcosa del genere:

def timesTwo(i: Int): Int = { 
    println("hello world") 
    i * 2 
} 

Come fare in modo che io possa fare qualcosa di simile nella console:

scala> timesTwo 

E in uscita il valore della funzione?

+3

Questo non è un duplicato. 'sbt console' compila il file sorgente all'avvio, quindi devi solo' Times timesTwo 7'. (L'avevo avvolto in un oggetto del Times come Brian. Coincidenza o destino?) –

+1

Concordato. Questo non è un duplicato. le console sbt e scala si comportano diversamente a questo riguardo. – Synesso

risposta

16

In breve, utilizzare la funzione :load nella scala REPL per caricare un file. Quindi è possibile chiamare tale funzione nel file se lo si avvolge in un oggetto o classe poiché sbt tenta di compilarlo. Non sei sicuro di poterlo fare con una semplice definizione di funzione.

Avvolgere in un object per ottenere sbt per compilare correttamente.

object Times{ 
    def timesTwo(i: Int): Int = { 
    println("hello world") 
    i * 2 
    } 
} 

carico il file:

scala> :load Times.scala 
Loading Times.scala... 
defined module Times 

quindi chiamare timesTwo in Times:

scala> Times.timesTwo(2) 
hello world 
res0: Int = 4 

se si desidera solo la definizione di funzione, senza avvolgendolo in un class o object la si può incollare con il comando :paste nella console scala REPL/sbt.

scala> :paste 
// Entering paste mode (ctrl-D to finish) 

def timesTwo(i: Int): Int = { 
    println("hello world") 
    i * 2 
} 

// Exiting paste mode, now interpreting. 

timesTwo: (i: Int)Int 

Questo può essere chiamato solo dal nome della funzione.

scala> timesTwo(2) 
hello world 
res1: Int = 4 
+0

Come fa a sapere dove caricarlo, qual è la directory predefinita –

+1

@Mike La directory in cui è stato eseguito 'scala' in. – Brian

+0

come si specifica la directory? Non posso dargli un percorso –

Problemi correlati