摘要: 在Scala中,有两种方式可以用来支撑高阶对象。1. 类型参数: trait DataOps[A] { def show(a: A) = println(a) } val numbericOps = new DataOps[Int]{}特质上有一个泛型A,当实例化类型的时候可以填入2. ... 阅读全文
posted @ 2015-11-05 13:40 thinking!!! 阅读(203) 评论(0) 推荐(0) 编辑
摘要: 脱糖的好处是可以用来查看implicit转换点,scala里这个功能虽然强大,但其实也是挺头疼的。脱糖的方法:1. scala -Xprint:typer [filename.scala] 脚本脱糖2. scala -Xprint:typer -e 'for(i import reflect.ru... 阅读全文
posted @ 2015-11-05 11:15 thinking!!! 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 其实type lambda就是类型系统上的currying。type lambda长的什么样子?Sample as below trait Monad[M[_]] { def point[A](a: A): M[A] def bind[A, B](m: M[A])(f: A ... 阅读全文
posted @ 2015-11-05 10:40 thinking!!! 阅读(240) 评论(0) 推荐(0) 编辑
摘要: 在实际使用的过程中对柯里化有了一些无法从书本上直接获得的感受。 在JAVA中函数不是头等公民,必须通过接口进行外观统一以后,才能通过实例作为载体进行处理逻辑的传递, 最容易理解的例子莫过于Strategy Pattern,这里就不复述这个概念了。 但是实际上大家都应该遇见过参数个数或者类型无法完全统 阅读全文
posted @ 2015-10-30 11:46 thinking!!! 阅读(617) 评论(0) 推荐(0) 编辑
摘要: 协变就是正向的形变: B extends A 可以推导出 List extneds List逆变就是逆向的形变: B extends A 可以推导出 List extends List具体可以参考:《Effective Java》PECS 原则 (producser-extends, consume... 阅读全文
posted @ 2015-10-24 21:53 thinking!!! 阅读(851) 评论(0) 推荐(0) 编辑
摘要: 个人的感觉其实并不拘泥于某种形式,也不太擅长形而上,在一开始只要实用,只能能够解决问题就好,很多的感悟,窍门都是日久以后,自然而然得来的,但是并不等于能够放弃相对微观的细节,也不能无视较为宏观的原理和概念层面,对!我就是喜欢从中间切入,从实践开始,然后向上下两端进行探索。题外话了,不多扯。函数式,具... 阅读全文
posted @ 2015-10-22 14:00 thinking!!! 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 从没写过博客,其实也不知道为什么要开一个,当然也就不知道具体要分享些什么。姑且当做一个自言自语的空间,不知道会不会一直写下去,也不清楚自己能坚持多久,更谈不上是否会对别人有帮助,虽然我的内心是希望能交流的。可能也会写得比较随意,打算先将所有的文章都作为随笔,然后周期性的整理归纳成文章。 阅读全文
posted @ 2015-10-20 20:29 thinking!!! 阅读(90) 评论(0) 推荐(0) 编辑