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.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: 速记表
框架
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 就没问题了