我正在使用Intellij-idea进行scala编程(使用sbt插件).
我想知道scala类,scala脚本和scala工作表之间的区别.当我们使用它们时?
如果您能通过一个简单的例子来解释它,这将是非常好的.
谢谢
可以通过以下方式启动文本文件来在Scala中编写shell脚本:
#!/bin/sh
exec scala "$0" "$@"
!#
Run Code Online (Sandbox Code Playgroud)
为了简化脚本创建,我想编写一个名为scalash(可能是BASH脚本)的可执行文件,允许将Scala脚本标题缩短为一行:
#!/bin/scalash
Run Code Online (Sandbox Code Playgroud)
可能吗 ?如果我可以传递可选参数scalash,例如添加类路径依赖项,则需要额外的点数.
所以我以前工作scala脚本试图在新的PC上运行它编译失败.
所以我制作了简单的脚本来测试:
#!/bin/sh
exec scala -J-Xmx2g "$0" "$@"
!#
println("test")
Run Code Online (Sandbox Code Playgroud)
并试图跑
test.scala
error: Compile server encountered fatal condition: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;
java.lang.NoSuchMethodError: java.nio.ByteBuffer.clear()Ljava/nio/ByteBuffer;
at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:61)
at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:40)
at scala.tools.nsc.io.SourceReader.read(SourceReader.scala:49)
at scala.tools.nsc.Global.getSourceFile(Global.scala:395)
at scala.tools.nsc.Global.getSourceFile(Global.scala:401)
at scala.tools.nsc.Global$Run$$anonfun$30.apply(Global.scala:1607)
at scala.tools.nsc.Global$Run$$anonfun$30.apply(Global.scala:1607)
at scala.collection.immutable.List.map(List.scala:284)
at scala.tools.nsc.Global$Run.compile(Global.scala:1607)
at scala.tools.nsc.StandardCompileServer.session(CompileServer.scala:151)
at scala.tools.util.SocketServer$$anonfun$doSession$1$$anonfun$apply$1.apply(SocketServer.scala:74)
at scala.tools.util.SocketServer$$anonfun$doSession$1$$anonfun$apply$1.apply(SocketServer.scala:74)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
at scala.Console$.withOut(Console.scala:65)
at scala.tools.util.SocketServer$$anonfun$doSession$1.apply(SocketServer.scala:74)
at scala.tools.util.SocketServer$$anonfun$doSession$1.apply(SocketServer.scala:69)
at scala.tools.nsc.io.Socket.applyReaderAndWriter(Socket.scala:49)
at scala.tools.util.SocketServer.doSession(SocketServer.scala:69)
at scala.tools.util.SocketServer.loop$1(SocketServer.scala:85)
at scala.tools.util.SocketServer.run(SocketServer.scala:97)
at scala.tools.nsc.CompileServer$$anonfun$execute$2$$anonfun$apply$mcZ$sp$1.apply$mcZ$sp(CompileServer.scala:218)
at scala.tools.nsc.CompileServer$$anonfun$execute$2$$anonfun$apply$mcZ$sp$1.apply(CompileServer.scala:213)
at scala.tools.nsc.CompileServer$$anonfun$execute$2$$anonfun$apply$mcZ$sp$1.apply(CompileServer.scala:213)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
at scala.Console$.withOut(Console.scala:53)
at scala.tools.nsc.CompileServer$$anonfun$execute$2.apply$mcZ$sp(CompileServer.scala:213)
at scala.tools.nsc.CompileServer$$anonfun$execute$2.apply(CompileServer.scala:213)
at scala.tools.nsc.CompileServer$$anonfun$execute$2.apply(CompileServer.scala:213)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58)
at …Run Code Online (Sandbox Code Playgroud) Groovy带有一个名为的编译器groovyc.对于每个脚本,groovyc生成一个扩展的类groovy.lang.Script,其中包含一个main方法,以便Java可以执行它.已编译类的名称与正在编译的脚本的名称相匹配.
例如,使用此HelloWorld.groovy脚本:
println "Hello World"
Run Code Online (Sandbox Code Playgroud)
这就像这段代码:
class HelloWorld extends Script {
public static void main(String[] args) {
println "Hello World"
}
}
Run Code Online (Sandbox Code Playgroud)
Scala带有一个名为的编译器scalac.
例如,使用相同的HelloWorld.scala脚本:
println("Hello World")
Run Code Online (Sandbox Code Playgroud)
代码无效scalac,因为编译器期望类或对象定义,但在Scala REPL Interpreter中工作.怎么可能?在执行之前它是否包含在类中?