2012-12-16 24 views
9

Powiel możliwe:
Load Scala file into interpreter to use functions?Jak załadować plik scala do konsoli sbt?

zacznę konsolę SBT tak:

[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> 

Mam test.scala (/home/alex/projects/test.scala) z czymś takim:

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

Jak to zrobić tak, że mogę zrobić coś takiego w konsoli:

scala> timesTwo 

i wyjściowych wartości funkcji?

+3

To nie jest duplikat. 'sbt console' kompiluje plik źródłowy podczas uruchamiania, więc musisz tylko' Times timesTwo 7'. (Zapakowałem to w obiekt typu Times, jak Brian, przypadek czy przeznaczenie?) –

+1

Zgoda. To nie jest duplikat. Konsole sbt i scala zachowują się inaczej pod tym względem. – Synesso

Odpowiedz

16

W skrócie, użyj funkcji :load w scala REPL, aby załadować plik. Następnie możesz wywołać tę funkcję w pliku, jeśli opakujesz ją w obiekt lub klasę, ponieważ sbt próbuje ją skompilować. Nie jestem pewien, czy możesz to zrobić za pomocą definicji funkcji.

Zawiń go w object, aby uzyskać sbt, aby skompilować go poprawnie.

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

Załaduj plik:

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

Następnie zadzwonić timesTwo w Times:

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

Jeśli chcesz tylko definicję funkcji bez owijania go w class lub object puszki wklejeniu to z poleceniem :paste w scala REPL/sbt konsoli.

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 

Można to nazwać po prostu nazwą funkcji.

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

Skąd wiadomo, skąd go załadować, jaki jest domyślny katalog –

+1

@Mike Katalog, w którym uruchomiłeś 'scala' w. – Brian

+0

jak określić katalog? Nie mogę nadać mu ścieżki –

Powiązane problemy