- 不清楚现在用 Linux 桌面做编程的有多少了,主要由 Ubuntu 和 RedHat 来支撑了。Mac OS X 倒是越发流行起来。
本视频示例了在 Ubuntu 上安装 JDK, SBT -- 下载,解压,设置 PATH 的过程。以及如何下载安接 Scala SDK IDE (集成了 Scala SDK, Scala 插件的 Eclipse,这样就不用单独安装那三个玩意儿)。
接着在 Scala IDE 中演示了 Scala HelloWorld 程序,最后就是 Scala WorkSheet,比 Scala 命令行下的 REPL 更强大的交互式工具,比 Swift 还早的 Playground.
Read More - Functional Programming Principles in Scala 课程介绍及课程安排,视频中会提些小问题,会在后面的视频中看到答案。 其后三个视频将会涉及到 Scala 环境的设置,包括 Windows, Mac OS X 和 Linux 下的工具设置。我们将接触到 SBT(Simple Build Tool), 其实是名不符实,SBT 是我用过最不简单的构建工具。我也觉得 SBT 叫做 Scala Build Tool 才合适,可以选择 Gradle,不过本课程是用 SBT。 IDE 的话基本就是 Eclipse, IDEA 二分天下。
挂上了英文字幕,你要在官方学完这套课程还能得到一个认证,形式而已。
Read More - 能在 Eclipse 或是 IDEA 中写 Scala 程序当然是不错的,但有时候还是有必要在更轻量级的文本编辑器中编辑,在 Unix 族系统中首推 vi。要让更好的编辑 Scala, 最主要就是让 vi 支持 Scala 的语法高亮。
有现成的 vi 插件,https://github.com/scala/scala-dist/tree/master/tool-support/src/vim。下载下来三个目录 indent, syntax 和 ftdetect 及文件放在~/.vim目录下.
然后到 vim 中命令syntax on打开语法高亮就能识别 *.scala 文件高亮显示 Scala 代码了。应该把syn on加到 vim 的初始化脚本~/.vimrc文件中去。
更为自动的一点是有人把下载支持文件做成了一句语 bash 脚本 Read More - JUnit 是个很著名的飞行模式测试框架,即使到了 Scala 中还是免不了要用 JUnit Style 的测试方式,基于 Spec 的方式并不处处行得通,比如想要在 Scala 中使用 JMockit 框架时。
JUnit 提供给我们有两个扩展点,Runner 和 Rule, Runner 扩展点一般被各种框架劫持了,自己搞个@RunWith(SomeRunner.class)可能让你无法在测试中应用框架。于是剩下了 Rule 是个更自由的扩展点,这里不讲述怎么定制自己的 Rule,而是怎么用它,怎么在 Scala 中用它。之前的一篇 JUnit 4 如何正确测试异常 中使用了ExpectedException这个 Rule。
Rule 的要求是: Annotates fields that reference rules or methods that return a rule. A field must be public, not static, and a subtype ofTestRule(preferred) orMethodRule. A method must be public, not static, and must return a subtype ofTestRule(preferred) orMethodRule. 属性或方法必须是 public 非静态的,它们的类型或返回类型必须分别是 TestRule 和 MethedRule。
这里尝试以 Java 的方式使用另一个 Rule,TestName, 可以得到当前测试方法的名称 Read More - Java 和 Scala 都支持变参方法, 写在最后的位置上,最基本的调用方式也都是一样的,一个个罗列过去。也可以传入数组参数,因为变参本质上就是一个数组,就是把 ... 开始位置到最后一个参数都收纳到数组中去,所以变参之所以要放在最后的位置上,且一个方法中最多只能有一个变参类型。
这里主要是对比 Scala 对变参方法的调用,基本调用法当然是没问题的,但是在传入数组作为变参的参数列表与 Java 相对时就稍有变化了。
另外提一下,如果想传入 List 作为变参列表,而不是整体作为变参的第一个元素就是调用集合的 toArray() 方法转换成一个数组传入。
下面看 Java 中对变参方法的调用,参数列表和数组1public class JavaVarArgs { 2 public static void main(String[] args) { 3 foo("a", "b", "c"); 4 foo(new String[]{"d", "e"}); 5 } 6 7 public static void foo(String...params) { 8 System.out.println(params + " : " + params.length); 9 for(String s: params) { 10 System.out.println(s); 11 } 12 } 13}
Read More - sbt, 又是一种自动化构建工具,意为 Simple Build Tool,目前还难副其名,它管理依赖也是用的 Ivy。Scala 相关的项目一般会用它,如 Play2,所以需要来研究下它怎么自定义任务。
sbt 项目可以用 build.sbt 或 project/Build.scala 来定义项目,build.sbt 里写些简单的 settings 表达式,而 Build.scala 就强大,可以写 val, object 和方法定义。而且单个 Build.scala 可以定义多个项目,build.sbt 只用来定义当前项目。build.sbt 和 project/Build.scala 能同时存在,它们的内容会编译到一块。还有一个全局的 build.sbt 文件~/.sbt/build.sbt,这里控制所有的项目。
所以我们分别看在 project/Build.scala 和 build.sbt 中如何定义自己的 task
首先看 project/Build.scala,分别由两行完成1val mytask = taskKey[Unit]("This is my customized task") 2mytask := { println("Execute customized task")}
完整的一个 project/Build.scala 如下 Read More - 我最爱在 Mac 下用 TextMate 了,2.0 后 TextMate 可免费使用了。在 http://macromates.com/download 上目前提供有 1.5.10, 1.5.11 和 2.o alpha。而且还开源了,见 https://github.com/textmate/textmate。但 2.0 之前的版本要用的话仍是需要注册,TextMate 2.0 还是自动更新的,可在 http://macromates.com/download,也可在 https://github.com/textmate/textmate/downloads 下载。
本来可以用 TextMate 2.0 挺好的,可是在 2.0 安装 Scala 的 Bundle 后,即使为它设置了 SCALA_HOME 仍是无法在 TextMate 中运行 Scala 程序,于是不得已为这个还得用 TextMate 1.5.11 了。
在此附上 Scala 和 Play2 的 Bundle 的下载安装方法:
$ git clone git://github.com/mads379/scala.tmbundle.git; open scala.tmbundle
$ git clone git://github.com/drewhjava/Play2.tmbundle.git; open Play2.tmbundle
使用 TextMate 是必须注册的,否则只能试用 30 天,从网上找来注册方法: Read More - 最近学习 Scala,因它是灵活的函数式编程,还有就是能为 PlayFramework 2.0 服务,看的是 《Programming in Scala》 那本书,并记下自己认为值得记录的东西,列举
- Scala 用元组/列表类型实现多返回值的函数
- Scala 无参数方法和统一访问原则
- Scala 的 apply 和 update 方法的应用
- Scala 特质(trait) 的 super 方法调用是动态绑定的
- Scala 的 yield 例子 (for 循环和 yield 的例子)
- Scala 中 ensuring 方法的使用说明
- Scala 2.10.0 新特性之使用隐式类进行类型隐式转换
- Scala 2.10.0 新特性之动态属性、方法
- Scala 2.10.0 新特性之字符串插值
- 使用 sbt 的 np 插件自动创建目录结构和 build.sbt 文件
Play 2.0 中文资料--翻译附注解(持续更新中) - 通常我们要创建一个 sbt 项目需要经历以下几步:
$ mkdir testscala && cd testscala #创建项目目录 testscala,并进入该目录
这一看怎么这么复杂啊,特别是习惯了 Maven 的同学们更会这么觉得。Maven 不仅可应用各种模板来创建不同类型的工程,完整的工程目录结构都有了。
testscala $ mkdir -p src/{main,test}/scala #创建源文件目录结构,可能还需要 mkdir -p src/{main,test}/resources
$ vi build.sbt # 填入基本的信息 (name, organization, version)
$ sbt
那么 sbt 能不能做到自动创建目录和配置文件呢,答案是: 本身不能。你可以基于一个项目模板目录结构拷来拷去。前面说是 sbt 本身不能,要知道 sbt 是一个插件化更彻底的玩意,如今的 0.12.2 的 sbt.zip 才 1M 大小,其余全赖插件帮你插来插去了。
因此,我们找来的 np(New Project) 插件 https://github.com/softprops/np 帮我们创建工程的目录结构和 build.sbt 文件。它能让我们创建项目的过程简化为以下两步操作:$ mkdir testscala && cd testscala #这一步还是不能少
np 的安装及使用可以参考:https://github.com/softprops/np,就是下面的步骤: Read More
$ sbt
> np name:testscala org:cc.unmi #这样 testscala 下 {main.test}/{scala,resources} 和 build.sbt 文件都有了 - Scala 在处理字符串方面终于也与时俱进了,引入了字符串插件,这在许多脚本语言中就早已这么做了。有了这个特性,字面量字符串和变量连接可以不需要总是用加号进行丑陋的连接了。有些脚本语言会是只对双引号字符串解析其中的变量,单引号的不会,当然Scala 是要区分字符串和字符类型。
直白的讲字符串插值就是,val name="Unmi"; val greeting=s"Hello $name"; greeting 的值就是 "Hello name"。产生效应的就是那个 s 方法。
Scala 2.10.0 为我们提供了三种字符串插值的方式,分别是 s, f 和 raw。它们都是定义在 StringContext 中的方法。
s 字符串插值器
可以解析字符串中的变量,可以调用方法,还能进行计算。实际调用的是 StringContext 中的 s 方法。 Read More