Jade Dungeon

Scala入门

https://stackoverflow.com/questions/16813537/how-can-i-use-the-new-reflection-api-to-tell-if-the-component-type-of-an-array-c
http://hongjiang.info/scala-type-system-manifest-vs-typetag/
https://stackoverflow.com/questions/12218641/scala-what-is-a-typetag-and-how-do-i-use-it
http://www.jianshu.com/p/44410b15d3fc
http://blog.csdn.net/u014729236/article/details/48656947
http://blog.csdn.net/snail_gesture/article/details/48167345
http://blog.chinaunix.net/xmlrpc.php?id=4707864&r=blog/article&uid=23516528

第一部分

scala.preparation:安装配置、构建工具。

scala.codestyle.scaladoc:代码风格。

scala.Part.01.start:入门、标识符、常用工具、基本类型

scala.Part.01.function:内建控制结构、函数与闭包

scala.Part.01.class:类、对象、类与对象高级应

scala.Part.01.abstract:动态成员、控制抽象

第二部分

scala.Part.02.htyc:组合与继承、Scala类的层级

scala.Part.02.trait:特质(Traits)

第三部分

scala.Part.03.pkg.acss:包和引用、访问修饰符

scala.Part.03.patten.match:样本类和模式匹配

scala.Part.03.exat:抽取器、断言、测试

第四部分

scala.Part.04.list:使用列表

scala.Part.04.collection:集合类型

第五部分

scala.Part.05.tt:泛型

scala.Part.05.abpart:抽象成员

scala.Part.05.implt:隐式转换

第六部分

scala.Part.06.typeadv:泛型与类型转换高级应用

scala.Part.06.state.implist:有状态的对象、实现列表

scala.Part.06.forexp:重温for表达式

第七部分

scala.Part.07.anod.xml:注解、使用XML

scala.Part.07.model:使用对象的模块化编程、对象相等性

第八部分

scala.Part.08.actor:Actor和并发

scala.Part.08.cct:定界延续、结合Scala与Java

通过游戏学习函数式编程:

  • https://david-peter.de/cube-composer/
  • 源代码在:https://github.com/sharkdp/cube-composer

scala.Part.09.functional.programming.01:函数式概念

scala.Part.09.math:相关数学概念

第八部分

scala.Part.10.gui:图形界面

例子

Scala样例:scala.example

scala.cheetsheet: 速记表

框架

lift

sbt

akka

scala.akka.Part.00.prepare:Akka

scala.akka.Part.01.basic:Akka基础

scala.akka.Part.02.vt-sp:Akka纵向扩展:最大利用单机性能

scala.akka.Part.03.he-sp:Akka横向扩展:集群化

scala.akka.Part.04.mailbox:Akka邮箱问题

scala.akka.Part.05.desgin.testing:Akka测试与设计

去年,google IO,让我震撼的就是那个google dataflow,一年后我终于知道怎么弄的了。 google dataflow 就是基于millwheel和flumejava做的。

然后你在看看他们的论文,类似的基础设施,akka 都有了只是没有如此highlevel的 产品出来

Reactive Programming太多lambda套lambda的情况了 (就跟node.js搞出来的代码差不多虽然那个是异步但实际上道理是一样的)。 函数式编程语言普遍提供了内置的CPS变换,所以写起来特别爽, 代码的外观就像普通的顺序逻辑一样,但是实际上却是响应式的。

lazy问题太多了,当我希望一个需要延迟求值的函数的时候,我会

def addOne : Int => () => Int = x => () => x+1 

这样,然后手动

val fiveAddOne=addOne(5) 

最后啥时候需要求值再

val result=fiveAddOne()

属于笨方法,但是在我看来有效地防止了求值顺序的不确定

还有就是 tuple 不 lazy

scala> lazy val (x: Int, y: Int) = (2 - y, 3)
x: Int = <lazy>
y: Int = <lazy>

scala> x + 1
java.lang.StackOverFlowError
  at .x$1(<console>:13)
  at .y$lzycompute(<console>:13)
  at .y(<console>:13)
  at .x$1$lzycompute(<console>:13)
  at .x$1(<console>:13)
  at .y$lzycompute(<console>:13)
  at .y(<console>:13)
  ........

用 Scalaz 的 LazyTuple 就没问题了