2012-04-04 35 views
12

Nếu tôi có hai tập tin scala uncompiled riêng biệt trong cùng thư mục như:Tập lệnh Scala có thể tham khảo mã scala chưa được biên dịch khác trong cùng một thư mục không?

// hello.scala 
object hello { 
    def world() = println("hello world") 
} 

và:

// do.scala 
hello.world() 

tôi nhận được một thông báo lỗi khi chạy do.scala:

$ scala do.scala 
error: not found: value hello 

Thay vào đó Trước tiên, tôi phải biên dịch tệp hello.scala và đặt nó trên đường dẫn lớp để làm cho nó hoạt động:

$ scalac hello.scala 
$ scala -cp hello do.scala 
hello world 

Có cách nào để lấy một tập lệnh để gọi tệp scala chưa được biên dịch khác bằng cách sử dụng quyền nhập, đóng gói, classpath, công cụ dòng lệnh scala hay cái gì khác không?

+0

Tôi đã đăng câu hỏi tương tự cách đây một thời gian. Câu trả lời có thể hữu ích: http://stackoverflow.com/questions/3760645/in-scala-is-it-possible-to-write-a-script-which-refers-to-another-script –

Trả lời

2

Nhìn vào biên dịch bay/nhúng trình biên dịch. Twitter util-eval là một ví dụ như vậy.

8

Có lẽ không chính xác những gì bạn đang tìm kiếm, nhưng từ Scala REPL shell bạn có thể làm

:load hello.scala 
:load do.scala 

để đạt được kết quả tương tự:

$ scala 
Welcome to Scala version 2.9.1 (Java HotSpot(TM) Server VM, Java 1.6.0_26). 
Type in expressions to have them evaluated. 
Type :help for more information. 

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

scala> :load do.scala 
Loading do.scala... 
hello world 

scala> 

Nếu bạn đang muốn một cái gì đó không tương tác cho việc viết kịch bản

$ cat <<EOF | scala 
:load hello.scala 
:load do.scala 
EOF 

cũng hoạt động.

Sử dụng :help để có những điều thú vị hơn mà trình REPL có thể thực hiện.

+0

Thú vị. Nếu tôi có các lọ khác tôi cần gọi từ mã, tôi có thể sử dụng cùng một thủ thuật nhưng với "cat << EOF | scala -cp jarfile.jar"? – user1305156

+0

Thực hiện điều này hoặc chỉ "cat myreplcommandsfile | scala" hoạt động nhưng làm cho shell của tôi không sử dụng được sau đó gây phiền nhiễu. – user1305156

+0

Tôi lưu ý có một thủ thuật REPL khác: cp 'yêu cầu cho phép bạn thêm một lọ hoặc một thư mục vào đường dẫn lớp. Và có, tôi nhận thấy nó đã làm một cái gì đó khủng khiếp cho nhà nước xterm của tôi sau khi nó đã hoàn thành quá nhưng tôi nghĩ rằng nó chỉ là tôi. Không chắc chắn những gì sửa chữa cho đó là; đơn giản chuyển hướng đầu ra dường như không giúp ích gì. – timday

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