Bowen's Blog

Respect My Authorita.

Learning Scala: Prepare Development Environment

| Comments

最近开始翻译Scala Cookbook, 希望能为Scala这门语言的推广做出些贡献。就我自己的学习语言和阅读教材经验来看,教材无法覆盖很多实际的使用过程中碰到的问题,比如环境问题等。于是想写一些列总结性blog,也算是自己的总结了。

Scala的安装:

安装前先确保机器上已经有java的环境,因为Scala同样需要JVM虚拟机。 Scala最新的版本是2.10.x, 安装的方法很简单,下载解压安装包,把scala/bin目录加入到PATH环境变量中即可,如下的脚本在OSX和*nux下适用。

1
2
link="http://www.scala-lang.org/files/archive/scala-2.10.3.tgz"
curl -O $link && tar xvzf scala-2.10.3.tgz ~/ && echo "export PATH=~/scala/bin/:$PATH"  >> ~/.bash_profile && source ~/.bash_profile

在命令行敲入scala就可以进入Scala的console(解释器)了。

1
2
3
4
5
 ~> scala
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.
scala>

还有一种办法是安装SBT, Scala工程的构建工具,OSX下直接用Homebrew就可以安装. brew install sbt 可能需要修改java虚拟机的启动参数,否则可能出错:

1
echo "export JAVA_OPTS=\"-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:PermSize=256M -XX:MaxPermSize=512M\"" >> ~/.bash_profile && source ~/.bash_profile

sbt console进入Scala的REPL console。

1
2
3
4
5
6
7
8
 ~> sbt console
[info] Starting scala interpreter...
[info]
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_51).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

Scala REPL 的使用

:help可以告诉你想要的关于Scala REPL的一切信息,个人觉得几个比较有用的命令有:paste, :load, :sh, :history等。 :paste,直接在Scala console里面编辑代码相对来说不是很方便,你可以选择自己熟悉的编辑器,完成代码,使用:paste命令,Command + V将代码拷贝到Scala REPL中,之后按Ctrl + D退出,对应的代码就被load到当前的进程当中了。

1
2
3
4
5
6
7
8
9
10
11
scala> :paste
// Entering paste mode (ctrl-D to finish)

def hello() = println("hello, world")

// Exiting paste mode, now interpreting.

hello: ()Unit

scala> hello
hello, world

在Scala console中也可以执行shell的命令,结果会被保存到一个list中,如下

1
2
3
4
5
scala> :sh ls
res15: scala.tools.nsc.interpreter.ProcessResult = `ls` (6 lines, exit 0)

scala> res15.toArray
res16: Array[String] = Array(README.md, cn, code_examples, conventions.yml, en, target)

:load命令+文件路径,可以加载Scala文件,导入你自定义的类/代码。

1
2
3
4
5
scala> :load ./code_examples/chap1/hello.scala
Loading ./code_examples/chap1/hello.scala...
hello, world

scala>

Scala的console支持和shell类似的history功能,你可以用Ctrl + R去搜寻前面执行过的代码再来一次,用:history查看所有的曾经运行过的代码。比较尴尬的是,虽然SBT文档里面注明是可以用shebang的方式去执行历史代码,我在REPL中却没有试验成功。Anyway,这个不是特别重要了。 还有些命令诸如:implicits,显示当前scope中的隐式定义,:imports可以显示导入类库的记录。 我好像没有说明console的最重要的作用。。。,那就是解释scala代码并返回结果,这个时候的Scala代码就像脚本一样,支持自动补齐,不过功能不是很强大。

1
2
3
4
5
6
scala> val x = 1 + 2
x: Int = 3
scala> "hello " * 5   #如果没有显式的赋值,scala解释器会给把结果指定一个变量名
res1: String = "hello hello hello hello hello "
scala> println(res1)
hello hello hello hello hello

编译运行一个Scala文件

scalacscala命令,和使用javacjava命令很像,都会生成class文件。

1
2
3
4
/*helloworld, example, helloworld.scala*/
object HelloWorld extends App {
   println("Hello, World");
}

scalac命令编译

1
 ~> scalac helloworld.scala

scala命令运行

1
2
~> scala HelloWorld
Hello, World

Scala IDE

Intelij, NetBeads和Eclipse都提供了Scala支持,看个人喜欢,可以随意选择。Netbeans的Scala插件是由国内的一个程序员邓草原开发的。当然,你也可以考虑其他的工具比如Emacs,Vim,Sublime或者Atom。

关于开发环境,基本就是这些了。