2012-12-16 36 views
9

thể trùng lặp:
Load Scala file into interpreter to use functions?Cách tải tệp scala trong bảng điều khiển sbt?

tôi bắt đầu SBT giao diện điều khiển như thế này:

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

Tôi có một test.scala (/home/alex/projects/test.scala) với một cái gì đó như thế này:

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

Làm thế nào để làm điều đó để tôi có thể làm điều gì đó như thế này trong giao diện điều khiển:

scala> timesTwo 

Và đầu ra giá trị của hàm?

+3

Đây không phải là bản sao. 'sbt console' biên dịch tập tin nguồn khi khởi động, vì vậy bạn chỉ cần' Times timesTwo 7'. (Tôi đã bọc nó trong một đối tượng Times như Brian. Trùng hợp hay số phận?) –

+1

Đồng ý. Đây không phải là bản sao. sbt và scala console hoạt động khác trong khía cạnh này. – Synesso

Trả lời

16

Nói ngắn gọn, hãy sử dụng hàm :load trong REPL REPAL để tải tệp. Sau đó, bạn có thể gọi hàm đó trong tệp nếu bạn bọc nó trong một đối tượng hoặc lớp học từ sbt cố gắng biên dịch nó. Không chắc chắn nếu bạn có thể làm điều đó chỉ với một định nghĩa chức năng.

Gói số điện thoại trong một số object để nhận sbt để biên dịch chính xác.

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

tải tập tin:

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

Sau đó gọi timesTwo trong Times:

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

Nếu bạn muốn chỉ định nghĩa hàm mà không cần gói nó trong một class hoặc object các bạn có thể dán với lệnh :paste trong bảng điều khiển REPL/sbt scala.

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 

Điều này có thể được gọi bằng tên hàm.

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

Làm thế nào để biết nơi để tải nó từ, thư mục mặc định là gì –

+1

@Mike Thư mục bạn chạy 'scala' in. – Brian

+0

làm thế nào để bạn chỉ định thư mục? Tôi không thể cung cấp cho nó một đường dẫn –

Các vấn đề liên quan