Scala复习-1
默认scala脚本以.sc
为扩展名,scala源程序以.scala
结尾
a.sc == 脚本 -> scala执行
a.scala == 源代码 -> scalac编译 -> scala执行
下面展示一个文件名为upper.scala
的scala脚本
package top.cocobolo
object Upper{
def main(args:Array[String]): Unit = {
args.map(s => s.toUpperCase).foreach(println(_))
}
}
命令行输入scalac upper.scala
可对其编译,发现在./top/cocobolo
下会生成Upper.class
文件;编译之后可以执行scala -cp . top.cocobolo.Upper test
来运行刚刚编译的.class
字节码。整个过程如下:
➜ Scala git:(master) ✗ scalac upper.scala
➜ Scala git:(master) ✗ scala -cp . top.cocobolo.Upper test
TEST
最后用scalap
逆向一下class文件
➜ cocobolo git:(master) ✗ scalap Upper
package top.cocobolo
object Upper extends scala.AnyRef {
def this() = { /* compiled code */ }
def main(args: scala.Array[scala.Predef.String]): scala.Unit = { /* compiled code */ }
}
以上是将该文件作为源代码先编译再运行,如果想直接作为脚本运行:
➜ Scala git:(master) ✗ scala ./upper.scala test
/Users/zhe.lin/Code/Codes/Scala/./upper.scala:1: error: illegal start of definition
package top.cocobolo
^
one error found
报这个错的原因是:
It looks like you’re trying to declare the
package
membership in a Scala script (run using thescala
command) or in the REPL.Only files defining just classes and objects which are compiled withscalac
may be defined as belonging to a package.When you run code in a script or a REPL session, behind the scenes it is actually compiled inside a method of an object, in which scope a package declaration wouldn’t be legal.
解决方案是将第一行的package top.cocobolo
注释掉:
// package top.cocobolo
object Upper{
def main(args:Array[String]): Unit = {
args.map(s => s.toUpperCase).foreach(println(_))
}
再运行:
➜ Scala git:(master) ✗ scala ./upper.scala test
TEST