Scala入门之工具篇
我初次接触Scala时,由于对Scala相关的工具不够熟悉,学习的效率低下。所以本文主要介绍Scala编程所必备的工具。一般而言,我们接触一门编程语言,都需要接触这门语言的编译器、REPL、构建工具、集成开发环境、文档(当然,因语言而异,编译器和REPL并不是每个语言都有的)。
REPL
行编辑
Ctrl+F 向前移动光标Ctrl+B 向后移动光标Ctrl+N 命令历史中的下一个Ctrl+P 命令历史中的上一个Ctrl+R 搜索命令历史Tab 自动补全
命令
REPL中的命令以:开始,比如:help用于显示所有命令,:quit用于退出。
其中模式相关的命令有:
:paste,多行模式,用于粘贴多行代码
:silent,安静模式,用于打开/关闭结果的输出
:power,高级用户模式,TODO
REPL历史相关的有:
history [num],显示num数目的命令历史
h?,搜索命令历史
:save ,保存逐行的代码到指定文件
:load , 从文件中逐行加载代码
:imports,TODO
语言相关:
type [-v] ,显示一个表达式的类型而无需求值,v表示verbose
kind [-v] ,显示一个表达式类型(type)的类别(kind)
拨开糖衣
Scala的语言中有许多语法糖,在REPL中可以用ToolBox解析字符串:
scala> import scala.tools.reflect.ToolBox
scala> val tb = scala.reflect.runtime.currentMirror.mkToolBox()
scala> tb.parse("for(x println(x)))
对于解析出来的语法树,还可以eval:
scala> val tree = tb.parse("for(x println(x)))
scala> tb.eval(tree)
1
2
3
res1: Any = ()
还可以使用universe.reify方法:
scala> import reflect.runtime.universe.
import reflect.runtime.universe.
scala> reify(for(x Predef.println(x))))
这个方法就功能上和ToolBox的区别在于,使用它来定位隐式转换比较方便。
除了这两种方法之外,还可以使用scala -Xprint:typer:
sadhen@debian:~/.sbt$ scala -Xprint:typer -e 'for(x {
object Main extends scala.AnyRef {
def (): Main.type = {
Main.super.();
()
};
def main(args: Array[String]): Unit = {
final class $anon extends scala.AnyRef {
def (): = {
$anon.super.();
()
};
scala.this.Predef.intWrapper(1).to(3).foreach[Unit](((x: Int) => scala.this.Predef.println(x)))
};
{
new $anon();
()
}
}
}
}
1
2
3
Scala的启动
可以这样设置启动脚本:
alias scala='scala -deprecation -feature -i ~/.scalarc'
在脚本中可以把上文中提到的ToolBox和reify工具准备好,还可以做一些简单的定制,比如scala的诊断方法(3) 在repl下统计方法的执行时间。
构建工具
通常,我们用SBT来构建Scala项目,但并不总是如此,有时候为了工程上的统一,也使用Maven。使用SBT的坑点在于在天朝这种特殊的网络环境下,软件包的下载尤为缓慢,甚至无法下载。解决方案之一就是科学上网,之二便是使用Repox社区公服。
只要在$HOME/.sbt/下新建一个文件repositories,其中内容如下,就可以使用Repox的社区公服。
[repositories]localrepox-maven: http://repox.gtan.com:8078/repox-ivy: http://repox.gtan.com:8078/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
集成开发环境
我使用Intellj Idea,只需在其中安装Scala插件,就可以愉快地开发Scala项目了。在开发过程中,我们可以当前的项目的任一目录上右击,在New中选择新建一个Scala Worksheet。在Scala Worksheet中可以使用交互模式,每次只要你写一行代码,Worksheet都会为你实时求值,并显示在右侧。这种模式结合了REPL的优点,使得你可以了解到代码的每一“行”所求得的结果,非常有利于新手学习Scala。
References
使用SBT构建Scala应用
scala的诊断方法(1) 使用-Xprint:typer看语法糖的背后
scala的诊断方法(2) 在repl下用reify查看表达式的翻译结果
REPL下的几种模式
关键字:scala, sbt
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!