2013年5月9日

Scala中的语言特性是如何实现的(1)

摘要: Scala可以编译为Java bytecode和CIL,从而在JVM和CLI之上运行。Scala有很多在Java和C#的世界中显得陌生的语言特性,本文将分析这些语言特性是如何实现的。objectScala中可以像这样创建object:12345object HowIsObjectImplementedInScala { def printSomething() { println("printSomething") }}然后在代码的其他地方调用printSomething,一个object究竟是什么东西呢? 我们将这段Scala编译为Java bytecode,然后反编译为 阅读全文

posted @ 2013-05-09 22:38 崔鹏飞 阅读(1116) 评论(0) 推荐(1) 编辑

2013年4月13日

如何一步一步推导出Y Combinator

摘要: 粘贴过来的代码高亮有问题,可以到我的另一个博客阅读:http://cuipengfei.me/blog/2013/04/09/make-y/本文讲什么?本文用Scheme(Racket)代码为例,一步一步的推出Y Combinator的实现。本文不讲什么?Y Combinator是什么,干什么用的,它为什么能够work,它的数学含义以及实际应用场景,这些话题由于篇幅所限(咳咳,楼主的无知)不在本文论述范围之内。如果有兴趣,请参考维基:http://en.wikipedia.org/wiki/Fixed-point_combinator#Y_combinator鸣谢感谢Jojo同学的这段Java 阅读全文

posted @ 2013-04-13 22:24 崔鹏飞 阅读(1193) 评论(1) 推荐(0) 编辑

2013年4月1日

用豆瓣读书Chrome插件,简单购买电子书

摘要: 原文地址:http://cuipengfei.me/blog/2013/04/01/doubanebookprice/为什么要做这款插件?在豆瓣上查看一本书的时候,页面的右侧会显示哪些网站可以购买该书以及各自的价格。 比如这本《乡关何处》,页面右侧显示了亚马逊,京东,当当等网站的购买链接。但是豆瓣只会提供纸质书的购买链接,不提供电子书的。除非该书豆瓣自己有售。 所以我写了个Chrome的插件来解决这个问题。这款插件怎么用?这款插件会在每个图书页面上添加正版电子书的购买链接及其价格。您只需点击链接去购买就好了。在Chrome中加载这个插件之后,再访问豆瓣的《乡关何处》的页面,右侧会多出三个链接: 阅读全文

posted @ 2013-04-01 17:38 崔鹏飞 阅读(961) 评论(2) 推荐(0) 编辑

2012年4月10日

自己动手重新实现LINQ to Objects: 12 - DefaultIfEmpty

摘要: 本文翻译自Jon Skeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/29/reimplementing-linq-to-objects-part-12-defaultifempty.aspx上次实现First/Last的时候写了大量的代码,相比起来,今天要讲的DefaultIfEmpty就轻松多了。DefaultIfEmpty是什么?这个操作符虽然简单,但是还是有两个重载:publicstatic IEnumerable<TSource> DefaultIfEmpty<TS 阅读全文

posted @ 2012-04-10 11:58 崔鹏飞 阅读(1972) 评论(1) 推荐(2) 编辑

2012年4月9日

自己动手重新实现LINQ to Objects: 11 - First,Last,Single以及它们带有OrDefault的重载

摘要: 本文翻译自JonSkeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/29/reimplementing-linq-to-objects-part-11-first-single-last-and-the-ordefault-versions.aspx今天我实现了六个操作符,每个操作符都有两个重载。我一开始以为这些操作符的实现会很相似,但是最后发现每个都稍微有些不同...今天实现了哪些操作符?以下三个集合的排列{First,Last,Single},{带有/不带有OrDefault},{带有/不 阅读全文

posted @ 2012-04-09 12:54 崔鹏飞 阅读(1663) 评论(0) 推荐(2) 编辑

2012年2月15日

自己动手重新实现LINQ to Objects: 10 - Any和All

摘要: 本文翻译自JonSkeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/28/reimplementing-linq-to-objects-part-10-any-and-all.aspx今天我们介绍两个操作符:Any和All。Any和All做什么?Any有两个重载,而All只有一个:public static bool Any<TSource>( this IEnumerable<TSource> source) public static bool Any<TSo 阅读全文

posted @ 2012-02-15 13:35 崔鹏飞 阅读(1748) 评论(0) 推荐(2) 编辑

2011年12月15日

自己动手重新实现LINQ to Objects: 9 - SelectMany

摘要: 本文翻译自JonSkeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/27/reimplementing-linq-to-objects-part-9-selectmany.aspx我们接下来要实现的这个操作符是LINQ中最重要的操作符。大多数(或者是全部?)其他的返回一个序列的操作符都可以通过调用SelectMany来实现,这是后话按下不表。现在我们首先来实现它吧。SelectMany是什么?SelectMany有四个重载,看起来一个比一个吓人:publicstaticIEnumerable& 阅读全文

posted @ 2011-12-15 23:28 崔鹏飞 阅读(1426) 评论(0) 推荐(1) 编辑

2011年9月14日

自己动手重新实现LINQ to Objects: 8 - Concat

摘要: 本文翻译自JonSkeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/27/reimplementing-linq-to-objects-part-8-concat.aspx上文讲的Count和LongCount返回的是数值类型,本文我们讲的Concat返回的是一个序列。Concat是什么?Concat只有一种签名形式,这让它使用起来很简单:publicstaticIEnumerable<TSource>Concat<TSource>(thisIEnumerable< 阅读全文

posted @ 2011-09-14 22:39 崔鹏飞 阅读(1427) 评论(0) 推荐(0) 编辑

2011年9月2日

自己动手重新实现LINQ to Objects: 7 - Count和LongCount

摘要: 本文翻译自JonSkeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/26/reimplementing-linq-to-objects-part-7-count-and-longcount.aspx今天的文章要介绍两个LINQ操作符,因为它们实在是太类似了,所以放到一起来讲。Count和LongCount的实现非常相像,不同的只是方法名,返回值类型和几个变量。Count和LongCount是什么呢?Count和LongCount各自有两个重载:一个重载接受谓词,另一个不接受。下面是这四个方法的 阅读全文

posted @ 2011-09-02 08:01 崔鹏飞 阅读(1426) 评论(0) 推荐(1) 编辑

2011年8月31日

浅析延迟执行--实现,优点,陷阱以及题外话

摘要: 上周五在公司内部做了一个小型的sharing,讨论了一些与延迟执行有关的东西。现在把ppt和代码分享出来。如有谬误,请不吝指教 :) 阅读全文

posted @ 2011-08-31 16:02 崔鹏飞 阅读(2013) 评论(8) 推荐(3) 编辑

2011年8月24日

自己动手重新实现LINQ to Objects: 6 - Repeat

摘要: 本文翻译自JonSkeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/24/reimplementing-linq-to-objects-part-6-repeat.aspx本文的主题是个无关紧要的方法,Repeat。关于Repeat,值得讨论的内容比Empty还要少。写这篇博文只是为了保证这个系列的完整性。Repeat是什么?Repeat是一个静态的泛型方法,不是扩展方法,它只有一个签名形式:publicstaticIEnumerable<TResult>Repeat<TRe 阅读全文

posted @ 2011-08-24 22:15 崔鹏飞 阅读(1383) 评论(0) 推荐(0) 编辑

2011年8月23日

自己动手重新实现LINQ to Objects: 5 - Empty

摘要: 本文翻译自JonSkeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/24/reimplementing-linq-to-objects-part-5-empty.aspx这一篇继续讲非扩展方法。这次我们要讲的是Empty,它有可能是最简单的LINQ操作符了。Empty是什么?Empty是一个泛型的,静态的方法,它只有一个签名形式,不接受任何参数:publicstaticIEnumerable<TResult>Empty<TResult>()它返回一个特定类型的空序列。这 阅读全文

posted @ 2011-08-23 23:23 崔鹏飞 阅读(1282) 评论(0) 推荐(0) 编辑

2011年8月22日

自己动手重新实现LINQ to Objects: 4 - Range

摘要: 本文翻译自JonSkeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/24/reimplementing-linq-to-objects-part-4-range.aspx本篇博文较短,接下来的几篇估计也会比较短。我觉得只有很相似的几个LINQ操作符才适合放到同一篇博文里面,比如Count和LongCount就比较适合放在一起讲。不过我也要采纳读者的意见,如果你喜欢“肥胖”一点的博文的话,请留言说明。本文将要讲解Range操作符。Range操作符是什么?Range只有一种方法签名:publics 阅读全文

posted @ 2011-08-22 22:07 崔鹏飞 阅读(1620) 评论(2) 推荐(0) 编辑

2011年8月21日

自己动手重新实现LINQ to Objects: 3 - Select

摘要: 本文翻译自JonSkeet的系列博文“Edulinq”。本篇原文地址:http://msmvps.com/blogs/jon_skeet/archive/2010/12/23/reimplementing-linq-to-objects-part-3-quot-select-quot-and-a-rename.aspx距离上次写完本系列博文的第一篇和第二篇已经有一段日子了,希望接下来的进度会快一些。现在我给本项目在GoogleCode上建立了源码管理,现在就无需每篇博文包含一个zip文件了。创建项目时,我给它取了个显而易见的名字,叫做Edulinq。我修改了代码中的命名空间,而且现在这一系列博 阅读全文

posted @ 2011-08-21 23:22 崔鹏飞 阅读(1450) 评论(4) 推荐(0) 编辑

自己动手重新实现LINQ to Objects: 2 - Where

摘要: 我们将要实现“Where”子句(也可以说是方法或操作符)。Where在总体上来说比较容易理解,但是涉及到延迟执行和流式处理的部分会有些麻烦。Where方法是泛型的,不过只有一个类型参数(在我看来这很重要,因为我觉得一个方法的泛型参数越多就越令人难以理解)。哦,对了,我们将在本文开始涉及查询表达式,这算是本文的一点额外猛料。 阅读全文

posted @ 2011-08-21 00:08 崔鹏飞 阅读(1056) 评论(0) 推荐(0) 编辑

导航