Ngoài các vấn đề về hiệu suất nghiêm trọng, Scala là một ngôn ngữ rất mạnh. Vì vậy, tôi hiện đang sử dụng nó thường xuyên cho các tác vụ kịch bản bên trong Bash. Có cách nào để chỉ thực hiện một tập tin * .scala chính xác cách tôi có thể làm với các tập tin Python? Theo như tôi biết, Python sử dụng bytecode để thực thi các chương trình, giống như JVM. Tuy nhiên, không có bất cứ điều gì gọi là pythonc (như scalac hoặc javac) tôi cần phải gọi để thực hiện điều này. Do đó tôi mong đợi Scala có thể hành động theo cách tương tự.Viết kịch bản bằng Scala: Cách khởi chạy tập lệnh chưa được biên dịch?
Trả lời
tôi không sử dụng python, nhưng trong Scala, điều scripty nhất mà tôi có thể làm là thế này:
thinkpux:~/proj/mini/forum > echo 'println(" 3 + 4 = " + (3 + 4))' | scala
Welcome to Scala version 2.10.2 (Java HotSpot(TM) Server VM, Java 1.7.0_09).
Type in expressions to have them evaluated.
Type :help for more information.
scala> println(" 3 + 4 = " + (3 + 4))
3 + 4 = 7
scala> thinkpux:~/proj/mini/forum >
Tuy nhiên, sau đó, tôi không có ý kiến phản hồi thị giác trong bash, vì vậy tôi có để gọi 'rõ ràng'.
Nhưng không có vấn đề trong việc viết một kịch bản và thực hiện điều đó:
thinkpux:~/proj/mini/forum > echo 'println(" 3 + 4 = " + (3 + 4))' > print7.scala
thinkpux:~/proj/mini/forum > scala print7.scala
3 + 4 = 7
Sau đó, không có vấn đề với vỏ.
Với một lớp kèm theo, mã sẽ không được thực thi:
thinkpux:~/proj/mini/forum > echo -e 'class Foo {\nprintln(" 3 + 4 = " + (3 + 4))\n}\n'
class Foo {
println(" 3 + 4 = " + (3 + 4))
}
thinkpux:~/proj/mini/forum > scala Foo.scala
thinkpux:~/proj/mini/forum > cat Foo.scala
class Foo {
println(" 3 + 4 = " + (3 + 4))
}
Nhưng với instatiating một lớp, bạn có thể thực thi mã trong nó, mà không sử dụng wellknown (hy vọng như vậy) cách 'chính':
thinkpux:~/proj/mini/forum > echo -e 'class Foo {\nprintln(" 3 + 4 = " + (3 + 4))\n}\nval foo = new Foo()' > Foo.scala
thinkpux:~/proj/mini/forum > cat Foo.scala
class Foo {
println(" 3 + 4 = " + (3 + 4))
}
val foo = new Foo()
thinkpux:~/proj/mini/forum > scala Foo.scala
3 + 4 = 7
các scala man page đưa ra một số ví dụ về cách để chạy các đoạn mã Scala như thể chúng là một kịch bản, cho cả Windows và các nền tảng không phải là Windows (sau đây ví dụ copy từ man page):
01.Unix
#!/bin/sh
exec scala "$0" "[email protected]"
!#
Console.println("Hello, world!")
argv.toList foreach Console.println
của Windows
::#!
@echo off
call scala %0 %*
goto :eof
::!#
Console.println("Hello, world!")
argv.toList foreach Console.println
Đẩy nhanh tiến độ chạy tiếp theo bạn có thể cache đoạn biên soạn với các tùy chọn -savecompiled
:
#!/bin/sh
exec scala -savecompiled "$0" "[email protected]"
!#
Console.println("Hello, world!")
argv.toList foreach Console.println
Cập nhật: như của Scala 2.11 (như đã nêu trong this similar answer), bạn có thể bây giờ chỉ cần làm điều này trên Unix:
#!/usr/bin/env scala
println("Hello, world!")
println(args.mkString(" "))
- 1. 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?
- 2. Trong Scala, có thể viết một kịch bản dùng để chỉ một tập lệnh khác
- 3. Truy xuất tập lệnh văn bản thuần túy từ tập lệnh bash được biên dịch
- 4. Có phải tất cả các tập lệnh được viết bằng ngôn ngữ kịch bản không?
- 5. Làm cách nào để khởi chạy tập lệnh ruby từ dòng lệnh bằng tên của nó?
- 6. Julia biên dịch kịch bản mỗi lần?
- 7. Kịch bản lệnh Shell của tôi khởi chạy Rake không chạy đúng khi được khởi chạy qua cron
- 8. Cách khởi chạy tập lệnh PowerShell từ dòng lệnh OS?
- 9. Chạy các kịch bản lệnh bằng vải như là root
- 10. Biên dịch tập lệnh PHP trong Linux
- 11. Kịch bản khởi động Cygwin
- 12. Biên dịch tập lệnh ruby thành exe?
- 13. Kịch bản khởi động Python
- 14. Chạy hai máy chủ nút từ một lệnh shell bằng cách sử dụng một kịch bản lệnh shell
- 15. Xác định xem tập lệnh ruby đã chạy chưa
- 16. Viết kịch bản lệnh traceroute cơ bản trong C
- 17. Có thể viết kịch bản lệnh shell nhanh hơn tập lệnh tương đương trong Perl không?
- 18. Khởi chạy tập lệnh dưới dạng root thông qua ADB
- 19. Kịch bản khởi động trên EC2
- 20. Phương pháp chính không được gọi trong kịch bản Scala
- 21. Khi chạy pdb của Python dưới dạng tập lệnh, làm cách nào để tự động khởi chạy tập lệnh?
- 22. Fun với các biến chưa được khởi tạo và biên dịch (GCC)
- 23. java có thể chạy mã scala đã biên dịch không?
- 24. Cách phân chia tập lệnh Scala thành nhiều tệp
- 25. Làm cách nào để phát hiện xem tập lệnh PHP đã chạy chưa?
- 26. Trình biên dịch C# được viết bằng C++?
- 27. Cách kích hoạt các phiên bản EC2 và tải lên/chạy tập lệnh khởi động trên mỗi phiên bản?
- 28. Trình biên tập Vim trong kịch bản python tempfile
- 29. Làm cách nào để chạy tập lệnh shell bằng Spotlight?
- 30. Biên dịch và thực thi mã Scala khi chạy
trùng lặp có thể xảy ra của http://stackoverflow.com/questions/7620144? –
Tôi không chắc chắn ý nghĩa định lượng để gắn vào "nghiêm trọng", nhưng Scala xấp xỉ hiệu suất của các ngôn ngữ JVM khác khi được sử dụng mà không chú ý đặc biệt đến hiệu suất và rất cạnh tranh với Java khi bạn áp dụng các tối ưu hóa thích hợp cho các điểm nóng được xác định theo kinh nghiệm. Tất nhiên, nếu bạn bao gồm thời gian khởi động JVM, nó không so sánh thuận lợi với mã gốc hoặc thậm chí các ngôn ngữ thông dịch thông thường như Python hoặc Perl. Nhưng khi bạn biên dịch mã mỗi khi bạn chạy một "tập lệnh", nó sẽ cố gắng kiên nhẫn của bất kỳ ai — Đừng làm vậy. –