Scala 函数式编程学习视频 -- Windows 下工具设置

Windows 无疑还是最大众化的个人操作系统了,很少很少人在 Windows 下用 Open-JDK。

本视频示例了在 Windows 下 JDK, SBT 的安装,需要设置相关的 PATH 环境变量。以及下载安接 Scala SDK IDE (集成了 Scala SDK, Scala 插件的 Eclipse,这样就不用单独安装那三个玩意儿)。

接着在 Scala IDE 中演示了 Scala HelloWorld 程序,最后就是 Scala WorkSheet,比 Scala 命令行下的 REPL 更强大的交互式工具,比 Swift 还早的 Playground. 阅读全文 >>

Scala 函数式编程学习视频 -- Mac OS X 下工具设置

随着苹果在 iPhone, iPad 以及 Apple Watch 上的造势,Mac OS X 也越来越流行起来。我们公司最近购置了不少的 Mac 设备,本人在 Apple 平台上工作已有三年了,对 Windows 系统感觉陌生了。

本视频示例了在 Mac OS X 下的 JDK, SBT 安装,一般 Mac OS X 随机安装了 JDK,若没有的话执行 java -version 会带领你安装 JDK。需要设置 SBT 的 PATH。以及如何下载安接 Scala SDK IDE (集成了 Scala SDK, Scala 插件的 Eclipse,这样就不用单独安装那三个玩意儿)。

如果想要安装更高版本的 JDK 也是要到 Oracle 去下载,还需设置新 JDK bin PATH 覆盖现有的。

接着在 Scala IDE 中演示了 Scala HelloWorld 程序,最后就是 Scala WorkSheet,比 Scala 命令行下的 REPL 更强大的交互式工具,比 Swift 还早的 Playground.

阅读全文 >>

Scala 函数式编程学习视频 -- Linux 下工具设置

不清楚现在用 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.

阅读全文 >>

Scala 函数式编程学习视频 -- 课程介绍

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 二分天下。

挂上了英文字幕,你要在官方学完这套课程还能得到一个认证,形式而已。

阅读全文 >>

配置 Scala 的 vim 编辑环境

能在 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 脚本 阅读全文 >>

Play2.3 自定义模板类型 -- Java 版

在上一篇 Play2 自定义模板类型 (Java&Scala),是基于 Play2.2 怎么自定义 Json 模板类型,分别用 Java 和 Scala 实现。从 Play2.3 开始,模板明确了是用 Twirl,所以构建文件上的配置略有不同,并且模板编译出的源文件位置也不一样,Play2.2 前生成的模板源文件在 target/scala-2.10/src_managed/main/views 目录,现在是生成在 target/twirl/main/views 目录。

在 Play2.3 中仍然是默认只支持 html, txt, xml, js 四种类型的模板,见 SbtTwirl。我们这里还是以增加 Json 模板支持为例,且只介绍用 Java 的方式。因为 Play2 尽管可以用 Java 来编写应用,但实现部份基本是 Scala,所以如果用 Scala 来进行扩展相对来说来比用 Java 简单些。

Play2.3 官方的自定义模板的文档 Adding support for a custom format to the template engine 有些出入,似乎还未来得急更新,以实操为证。

还是从构建文件开始 阅读全文 >>

Scala + JUnit 怎么使用 @Rule

JUnit 是个很著名的飞行模式测试框架,即使到了 Scala 中还是免不了要用 JUnit Style 的测试方式,基于 Spec 的方式并不处处行得通,比如想要在 Scala 中使用 JMockit 框架时。

JUnit 提供给我们有两个扩展点,RunnerRule, 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 of TestRule (preferred) or MethodRule. A method must be public, not static, and must return a subtype of TestRule (preferred) or MethodRule. 属性或方法必须是 public 非静态的,它们的类型或返回类型必须分别是 TestRuleMethedRule

这里尝试以 Java 的方式使用另一个 Rule,TestName, 可以得到当前测试方法的名称 阅读全文 >>

Play2 自定义模板类型 (Java&Scala)

Play2 默认支持的模板类型是 html, txt, xml 和 js,不在这些支持之列的模板文件即使放到 app/views 目录中,也不会被编译的。如果要支持自定义的模板类型就要些定制了,这比 Play1 复杂些。模板的定制包括在 Build.scala 或 build.sbt 中加上 templatesTypes 配置,并需创建 BufferedContent 和 Format 实现类。下面以增加 json 模板类型为例,兼顾 Scala 和 Java 的实现类,是基于 Play2.2 的,在 Play2.3 中又略有不同。

官方有相关的文档,参考:Custom formats on Scala, Custom formats on Java模板定义参考.

在较新一些的 2.2 的 PlaySettings 中,可以看到

弄清了上面的原理后,开始我们的步骤

第一步:修改项目构建文件

在构建文件 build.sbt 或 Build.scala 中增加下面的内容作为项目的 setting 阅读全文 >>

Java 的匿名类初始化块中如何访问同名参数?

因为写过类似下面的一段代码来实始化一个匿名实例

看上面的 buildTest() 方法中的 this.name = name 希望能把方法参数 final String name 中的 name 值赋值给 this.name, 但是无效,this.name = name 是在把自己赋给自己。 阅读全文 >>

代码中如何获得 Java 方法的形式参数名

对于一个 Java 方法 foo(int id, String name); 我们如何能在代码中获得形式参数名 id 和 name 呢?

我们知道通过反射 API Method.getGenericParameterTypes() 可以获得方法的参数类型,但是对于参数名一般就是 arg0, arg1, arg2 ..., 因为 Java 编译时把形式参数名擦除了。所以对完全擦除了形式参数名的字节码应该是没办法了,但我们自己写的类还是有能力去管控的。

对于自己写的类,有两种办法获得形式参数名,分别是

1) Java8 的 -parameters 编译参数,然后用 Java8 新引入的反射 API Parameter

我们先在 Java8 下运行下面的代码 阅读全文 >>