Smilingleo's Blog

Scala雾里看花

April 23, 2015

Scala的学习过程中,经常会碰到一些莫名其妙的现象,很多时候,这些语言层面的“怪象”都与scala编译器或者scala的类型系统有关。

本文不是对编译器和类型系统的介绍,而是重点介绍遇到这些现象的时候,用什么样的方式,拨开云雾见蓝天,通过这些工具获取一些细节帮你了解编译器和类型系统如何工作。工欲善其事,必先利其器。

REPL

Read-Evaluate-Print-Loop, 是一个所有学习scala的同学都要掌握的工具,可以帮你快速测试一些代码,了解一些library怎么使用。

在安装scala之后,命令行下执行scala,就会进入REPL.

$ scala
Welcome to Scala version 2.11.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_65).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

如果是SBT项目,可以用sbt console进入,之后操作类型,不再重复。

模式

scala REPL有几种模式,其中比较常用的就是:paste,可以比较方便的输入多行,不过要注意,拷贝粘贴的代码中,不要有Tab,否则会触发auto code completion,出现一堆错误提示。

反射

命令行参数

通过man scala, man scalac,可以了解scala都有哪些参数可用。注意的是:scala的命令行参数中import了scalac的参数,所以可以在scala命令后面使用任何scalac的参数。其中比较有用的参数有:

  • -X系列,用于输出高级选项概要。也就是正式支持的选项,向后兼容。
  • -Y系列。用于输出私有选项信息,可能随版本变化。参见[6][7]

scala -Xscala -Y可以分别列出当前版本所支持的所有选项。

参考

  1. What's the easiest way to use reify (get an AST of) an expression in Scala? stackoverflow
  2. How to investigate objects/types/etc. from Scala REPL? stackoverflow
  3. Practical Type Mining in Scala , scaladay 2013
  4. REPL的几种模式, hongjiang
  5. Symbols, Trees, and Types, scalaDoc
  6. Difference between -Y and -X compiler options, scala user forum
  7. Scala Compiler Advanced Options

Prev: 用Mixin组合实现Scala中的AOP

Next: MySQL Master/Slave Replication on Docker


Blog comments powered by Disqus.

© Wei Liu | 2024