2.3 让Scala跑起来

想快速尝试一下Scala的话,直接用scala这个命令行shell就行。你可以在上面尝试着运行一些简单的Scala代码片断。在编写应用的时候,这个有用的工具可以帮你快速试验一些新代码。

在命令行上(不管是终端窗口还是命令提示符),输入scala。你可以见到下面的介绍信息和一个提示符:

  1. >scala
  2. Welcome to Scala version 2.7.4.final (Java HotSpot(TM) Client VM,
  3. Java 1.5.0_16).
  4. Type in expressions to have them evaluated.
  5. Type :help for more information.
  6. scala>

在提示符后面,输入val number = 6,然后回车。Scala shell会做出如下反应,表示它把number这个变量推演为Int类型,因为我们给变量的赋值是6。

  1. scala> val number = 6
  2. number: Int = 6
  3. scala>

现在试着输入number = 7,Scala会给出下面的错误信息:

  1. scala> number = 7
  2. <console>:5: error: reassignment to val
  3. number = 7
  4. ^
  5. scala>

Scala告诉我们,number这个常量不能重新赋值。但我们还是可以在控制台上重新定义常量与变量。例如输入val number = 7,Scala就能接受了。

  1. scala> val number = 7
  2. number: Int = 7
  3. scala>

只有在交互式shell上,我们才能在同一个作用范围内对常量和变量进行重新定义,这在真正的Scala代码或者脚本中是行不通的——所以说,shell的这种灵活性让我们可以更轻松地在上面进行试验。

输入val list = List(1, 2, 3),你会发现Scala推演出了List的类型并输出:List: List[Int] = List(1, 2, 3)。无论什么时候,只要你不确定某个表达式会被推演成什么类型,你都可以很快地在shell里试出结果。

你可以用“up”键找到之前输入的命令。它甚至还可以找到上一次调用shell时用过的命令。输入命令的时候,你可以用Ctrl+A回到行首,用Ctrl+E到达行尾。

只要你敲下回车键,shell就会立刻执行你输入的东西。如果你的语句没写完(例如方法定义写了一半)就按了回车,shell会提示一个竖线(|),让你把定义写完。例如下面我就是用了两行来完成isPalindrome()方法的定义,然后调用了两次并查看结果:

  1. scala> def isPalindrome(str: String) =
  2. | str == str.reverse.toString()
  3. isPalindrome: (String)Boolean
  4. scala> isPalindrome("mom")
  5. res1: Boolean = true
  6. scala> isPalindrome("dude")
  7. res2: Boolean = false
  8. scala>

Shell上的工作做完以后,你可以输入:quit或者exit退出shell。除了用shell外,我们还可以在命令行上用-e这个选项(其含义为执行参数)把简短的语句或是表达式传给Scala。

GettingStarted/RunScalaOnCommandLine.cmd

  1. scala -e "println(\"Hello \"+args(0)+\", \"+args(1))" Buddy
  2. "Welcome to Scala"

Scala会返回下面的信息:

  1. Hello Buddy, Welcome to Scala

我们用了()而不是[]来索引args变量——这是个Scala的惯用法,我们稍后讨论。

如果你在文件里写好了Scala代码,可以用:load选项把它载入shell。比如要加载一个名为script.scala的文件,就在shell里面输入:load script.scala。这个选项可以用来加载预先写好的函数和类,并在shell里试验它们。