2010-09-21 27 views
5

Tôi hiện đang xem xét sử dụng kịch bản Scala để kiểm soát vòng đời của cơ sở dữ liệu MySQL thay vì sử dụng các tập lệnh MS-DOS (Tôi đang sử dụng Windows XP) .Trong Scala, có thể viết một kịch bản dùng để chỉ một tập lệnh khác

Tôi muốn có một kịch bản cấu hình mà chỉ chứa thông tin cấu hình, và 1 hoặc các kịch bản quản lý hơn mà sử dụng các thông tin cấu hình khác nhau để thực hiện các hoạt động như bắt đầu, dừng lại, tình trạng show, vv .....

Có thể viết kịch bản Scala bao gồm/nhập/tham chiếu một tập lệnh Scala khác không?

Tôi đã xem xét tùy chọn -i của trình thông dịch scala, nhưng điều này sẽ khởi chạy một phiên tương tác không phải là điều tôi muốn.

Trả lời

3

Tôi muốn sử dụng Process và gọi tập lệnh Scala khác giống như bất kỳ lệnh nào khác.

+0

Tôi cảm thấy như tôi chỉ vừa mới phá vỡ bề mặt của sự phong phú của Scala, vì vậy khi tôi đọc câu hỏi của OP, tôi mong muốn tìm hiểu Scala thêm cái gì đó của riêng mình ngoài java.lang.ProcessBuilder ... nhưng tôi đã không tìm thấy bất cứ điều gì. Đây có phải là trường hợp không? –

+0

@Rodney Có. Nó được sử dụng rộng rãi bởi SBT, trong đó có một phiên bản cập nhật hơn của nó. Phiên bản này đã lỗi thời và có thể thậm chí không biên dịch theo Scala 2.8. Tôi nghĩ rằng có kế hoạch để cập nhật nó, nhưng bạn nên nói chuyện với nhà phát triển của nó về nó. –

+0

Đối với trường hợp sử dụng của tôi, Quy trình sẽ rất hữu ích để thực thi các tập lệnh MySQL. Tôi đã thực sự viết mã Scala đơn giản để làm điều đó, mặc dù giải pháp của tôi là hư không hoàn chỉnh như Quy trình. Tuy nhiên, những gì tôi đang tìm kiếm là khả năng sử dụng các biến và phương thức được định nghĩa trong một kịch bản scala từ một kịch bản Scala khác. Tôi không thể thấy Quy trình sẽ giúp tôi như thế nào ở đây. Một cái gì đó giống như công cụ kịch bản Sling Scala có vẻ khá hữu ích. –

4

Theo Scala man, tính năng tải trước tập lệnh chỉ hoạt động cho chế độ tương tác.

Để khắc phục sự cố, bạn có thể thoát khỏi chế độ tương tác sau khi chạy tập lệnh. Dưới đây là đoạn code của child.bat (kịch bản trong đó bao gồm một số khác generic):

::#! 
@echo off 
call scala -i genetic.bat %0 
goto :eof 
::!# 
def childFunc="child" 

println(geneticFunc) 
println(childFunc) 
exit; 

genericFunc được quy định tại genetic.bat

Kết quả của child.bat:

>child.bat 
Loading genetic.bat... 
...  
geneticFunc: java.lang.String 
Loading child.bat... 
... 
childFunc: java.lang.String 
generic 
child 
+1

Cảm ơn. Chế độ tương tác không giúp tôi nhiều. Để giải quyết vấn đề này, tôi có thể sử dụng XML để lưu trữ thông tin cấu hình và thay vì có nhiều hơn 1 tập lệnh, tôi sẽ chỉ viết một kịch bản để người dùng có thể chuyển các tùy chọn dòng lệnh để thực hiện các thao tác khác nhau. –

+0

Rất tiếc, không thấy cập nhật của bạn khi tôi đăng nhận xét của mình. Tôi sẽ xem xét phương pháp của bạn. –

+0

Vấn đề duy nhất với phương pháp này là khi kịch bản được tải trong chế độ tương tác, thông dịch viên không thể nhận ra tiêu đề lô và in một số lỗi cho bảng điều khiển. Tuy nhiên, những cảnh báo đó có thể bị bỏ qua, vì kịch bản cuối cùng cũng chạy tốt. –

1

Một lựa chọn sẽ có một kịch bản nối hai tệp lại với nhau và sau đó khởi chạy nó, chẳng hạn như:

@echo off 
type config.scala > temp.scala 
type code.scala >> temp.scala 
scala temp.scala 
del temp.scala 

hoặc tương tự. Sau đó, bạn giữ hai riêng biệt như bạn muốn.

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