除了嚴重的性能問題,Scala還是一門非常強大的語言。因此,我現在經常在Bash內部使用腳本任務。有沒有辦法像我能用Python文件一樣來執行* .scala文件?據我所知,Python使用字節碼來執行程序,就像JVM一樣。然而,爲了達到這個目的,我不需要調用pythonc(比如scalac或者javac)。因此我希望Scala能夠以類似的方式行事。使用Scala編寫腳本:如何啓動未編譯的腳本?
8
A
回答
2
我不使用Python,但在Scala中,最指令碼我能做的事是這樣的:
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 >
然而,事後,我沒有在bash的視覺反饋,所以我有呼叫'清除'。
但在編寫腳本和執行沒有問題:
thinkpux:~/proj/mini/forum > echo 'println(" 3 + 4 = " + (3 + 4))' > print7.scala
thinkpux:~/proj/mini/forum > scala print7.scala
3 + 4 = 7
然後,沒有與外殼的問題。
隨着外圍類,代碼就不會被執行:
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))
}
但隨着instatiating一類,你可以執行它的代碼,而無需使用衆所周知的(希望如此)「主要」的方式:
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
17
的scala man page提供了有關如何,如果他們的腳本運行Scala代碼片段,Windows和非Windows平臺上的一些例子(以下從手冊頁複製示例):
的Unix
#!/bin/sh
exec scala "$0" "[email protected]"
!#
Console.println("Hello, world!")
argv.toList foreach Console.println
的Windows
::#!
@echo off
call scala %0 %*
goto :eof
::!#
Console.println("Hello, world!")
argv.toList foreach Console.println
要加快後續運行中您可以用-savecompiled
選項緩存編譯片段:
#!/bin/sh
exec scala -savecompiled "$0" "[email protected]"
!#
Console.println("Hello, world!")
argv.toList foreach Console.println
更新:爲斯卡拉2.11(在this similar answer指出的),你可以現在只是這樣做在Unix上:
#!/usr/bin/env scala
println("Hello, world!")
println(args.mkString(" "))
相關問題
- 1. Scala編寫的腳本
- 2. Scala腳本編寫的有用資源
- 3. 使用powerCLI腳本編寫腳本
- 4. 編譯腳本
- 5. 如何編寫使用gdb的腳本?
- 6. 如何編譯julia腳本?
- 7. PHP腳本如何編譯?
- 8. 編寫一個腳本來啓動install4j
- 9. 如何編寫shell腳本以使用cron自動重啓tomcat7?
- 10. 如何使用ant編譯NSIS腳本?
- 11. Google Apps腳本編輯器未啓動
- 12. 使用C#編寫腳本?
- 13. 如何決定何時編寫腳本而不是手動編寫腳本?
- 14. 如何編寫shell腳本?
- 15. 如何編寫Android.mk腳本?
- 16. 如何編寫ASP.NET腳本
- 17. 如何編寫Ant腳本?
- 18. 如何編寫shell腳本
- 19. 如何使用腳本定義(sdef)編譯AppleScript腳本庫(scptd)
- 20. 如何使用DOM編寫腳本?
- 21. 如何使用Haskell編寫CGI腳本?
- 22. scala的啓動腳本REPL
- 23. 如何編輯fishshell啓動腳本
- 24. 「編譯」 Python腳本
- 25. 編輯Subversion post-commit腳本啓用自動Hudson編譯
- 26. 編寫shell腳本的shell腳本
- 27. 如何編譯我的Perl腳本以減少啓動時間?
- 28. 使用mxmlc編譯器編譯動作腳本
- 29. Windows腳本編寫
- 30. 編寫C++「腳本」
http://stackoverflow.com/questions/7620144的可能的複製? –
我不確定附加到「嚴重」的定量含義,但是Scala在使用時沒有特別注意性能而接近其他JVM語言的性能,並且在將適當的優化應用於經驗確定的熱點時與Java非常具有競爭力。當然,如果你包含JVM啓動時間,它不會與本地代碼甚至傳統的解釋型語言(如Python或Perl)相媲美。但是,當您每次運行「腳本」時編譯代碼時,它都會嘗試任何人的耐心 - 不要這樣做。 –