Scala 特质(trait) 的 super 方法调用是动态绑定的

在 Java 或者 Scala 的类中,super.foo() 这样的方法调用是静态绑定的,也就是说当你在代码中写下 super.foo() 的时候就能明确是调用它的父类的 foo() 方法。然而,如果是在特质中写下了 super.foo() 时,它的调用是动态绑定的。调用的实现奖在每一次特质被混入到具体类的时候才被决定。

确切的讲,特质的 super 调用与混入的次序很重要,参照下面的例子说话:

直截的讲就是超靠近后面的特质越优先起作用。当你调用带混入的类的方法是,最右侧特质的方法首先被调用。如果那个方法调用了 super,它调用其左侧特质的方法。可以这么认为,Doubling 的 super 指向了  Incrementing,Incrementing 的 super 指向了 BasicIntQueue。

来看个完整的实例实际体验一把,如果要帮助理解,最好应该实际运行一下这个实例 阅读全文 >>

Scala 的 yield 例子 (for 循环和 yield 的例子)

我看了《Programming in Scala》一书,仍然对 Scala yield 关键字的理解不甚清楚。起初我以为 Scala yield 的与 Ruby 的 yield 是一样,Ruby 中 yield 是被传入代码块的占位符。Scala 中的 yield 关键字好像总是在 for 循环中用的. 下面一些例子可以帮助你更好的理解 yield 关键字。下面是摘自 《Programming in Scala》关于 yield 的解释:

For each iteration of your for loop, yield generates a value which will be remembered. It's like the for loop has a buffer you can't see, and for each iteration of your for loop, another item is added to that buffer. When your for loop finishes running, it will return this collection of all the yielded values. The type of the collection that is returned is the same type that you were iterating over, so a Map yields a Map, a List yields a List, and so on.
Also, note that the initial collection is not changed; the for/yield construct creates a new collection according to the algorithm you specify.

上面那段话的意义就是,for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala 中 for 循环是有返回值的。如果被循环的是 Map,返回的就是  Map,被循环的是 List,返回的就是 List,以此类推。 阅读全文 >>

Scala 中 ensuring 方法的使用说明

Scala 在方法里除了可用 assert() 方法像 Java 那样进行断言,还可以使用 ensuring() 方法在返回结果的分支的花括号同一行上进行断言。它们不同的是 assert 可以随意放在哪里对任何的 boolean 类型进行断言,而 ensuring 是用来对返回结果行断言的,所以它必须尾随返回结果处。 assert 和  ensuring 方法都是定方在 Predef 中的,所以可以直接写。

在 《Programming in Scala》一书中对 ensuring 使用的示例代码,会让人感到很费解的,并且对 ensuring 的解释也不多,只是说了 ensuring 中用 "_" 作为当前返回结果对象的占位符。在 《Programming in Scala》中 ensuring 示例代码是:

第一个让人一下不好理解的是方法定义第一行等号后没有加花括号,一般来说方法只包一条(行)语句时花括号可以省略,多行时虽然程序能够推断出该方法在何处解释,但人来阅读时却不容易把握方法代码在哪里结束,所以最好多行时用花括号括住函数代码。再说,如果在 Scala 控制台敲上面的代码,中间加回车的时候就会报错。 阅读全文 >>

Joomla 扩展使用手记:给 JCK Patched Editor 加添 Groovy 和 Scala 语法高亮支持

JCK Patched Editor 2.4.6.1 Beta1(http://www.joomlagate.com/component/option,com_remository/Itemid,48/func,fileinfo/id,289/) 能够很方便的支持语法加亮显示。目前它所支持的语言有 C++、C#、CSS、Delphi、Java、JavaScript、PHP、Python、Ruby、SQL、VB.NET、XML/HTML。因为它所采用的语法着色程序是 db.syntaxhighlighter,而我之前对 db.syntaxhighlighter 也有一定的研究,它对其他语法的支持扩展是很容易的,加把相应的刷子而已。

这里先讲安装好 JCK Patched Editor 之后,如何让它支持 Groovy 和 Scala 语法。

1. 下载 Groovy/Scala 刷子脚本

在页面 http://code.google.com/p/syntaxhighlighter/source/browse/trunk/Scripts/?r=92 下载到 shBrushGroovy.js 和 shBrushScala.js 这两个脚本,放到 Joomla 站点的目录 /plugins/content/joomler_syntaxhighlighter/Scripts/ 中。 阅读全文 >>

本想做个 Scala 的推广,无奈本可注册的域名失了时机,望大家能出谋划策

了解了下 Scala(http://www.scala-lang.org) 语言的特性,也觉得颇有些搞头。首先不失面象对象的特征,又能作泛函编程,并能像 Erlang 那样适用于多核、并发编程。且看看这个语言的名称 Scalable,即可知它的志向之远大。力求以高定制、扩展性去应用于,无论是小软件还是大应用。

Groovy 之父说过:要是早知有 Scala,就不会再发明 Groovy。这两东西都是构筑在 JVM 平台的,要说 Groovy 发展至念今,所得奖项也不少,推广好像不咋样。以及有“Scala 将成为现代 Web 2.0 的发起语言” 的论调,还有 Scala 实际在 Twitter 上的应用等等。

然而,国内好像对  Scala 的了解还不多,于是滋生了一个在国内对它进行推广的念头:建个站点、弄个域名、紧跟 Scala 的脚步,网友热心参与。就像人名一样,域名也应该是要让人印像深刻的。前几天在万网上搜索时像 scalachina.com、scalacn.com、cnscala 等都没人用,可是工作忙了下,耽搁了几天,那几个域名就被人占了去,并且也能看到人家的页面了。

没奈,时间上咱是差了一步,那我还是有信息在其他方面做得更好的啊。再说呢,也没过几个 什么什么中国 的网站做得特别出色的呀,看看 JavaEye 是怎么后来崛起的就知道了。我的目标是想做出一个像 JavaEye 那样的东西,看过有个叫 PhpEye,如果再叫 ScalaEye 就有些老土了,原本想的 Scala 中国 这样的名称就有些俗的。

虽说那么多,搞个站点,空间是已经有了,但在最前面掌管门面的终究还是域名,在想一个响亮的名字。就像脑白金,为啥不以它的实际药品学名美乐通宁(melatonin) 来命名,而冠之以“脑白金”,方能显示其金贵。当然脑白金是太多的忽悠成分,我还是不用学这些。既然常规思维被阻断了,那只能另辟溪径,不走寻常路了。

望路过者也来想想假如是做个以 Scala 为内容的网站,集思广议,该取个什么网站名称或域名比较有寓意呢,响亮而容易给人留下深刻印象的。当然不是像恒源祥的广告那样,让人抓狂了被迫记住的效果。若是有兴趣的还可以一起来合作,即使进来调侃调侃下也会是不错的。

介绍一下现阶段比较好的 Scala 中文的网站:51CTO.com 下的 Scala 专题:http://developer.51cto.com/art/200906/127830.htm