Ruby blocks提供灵活编码手段

Ruby语言的出现,改变了程序员传统的编写诶代码方式,使编程人员在编写代码时会有一种非常愉悦的心情。在这里我们为大家介绍一种灵活编码手段Ruby blocks。

Ruby Rmagick安装指导手册Ruby特殊语法概念解析Ruby获取当前类名代码示例解析Ruby模块OpenURI获取HTTP/FTP地址内容浅析Ruby加密实现代码范例

先来看一下这段代码:

    classSongList def[](key) return@songs[key]if key.kind_of?(Integer) return@songs.find{ |aSong|aSong.name==key} end end

在第四行中,有find这样一个方法,可以按照指定条件对songs进行遍历,最终返回一个符合条件的个体。

下面就来看看这个方法到底是怎么实现的。

    classArray deffind foriin0size value=self[i] returnvalueifyield(value) end returnnil end end

发现是在Array这个类中,增加了一个method,在method中嵌入了一个遍历操作。如果只是这样的话,那么ruby和其他语言也就没有什么差别了,我们注意到第5行中有yield,这么一个东东。其实他起到了一个代理的作用,实现了实际操作部分和遍历的分离。

再看看下面这个例子,来了解一下yield的功能。

    1defthreeTimes yield yield yield end threeTimes{puts"Hello"}

这里定义了名叫threeTimes的blocks, Ruby blocks中会重复3次外部的操作,当row 6的代码执行后,会得到后面的结果:HelloHelloHello

可以看到blocks为我们提供了如此灵活的手段,其实他语言中需要通过代理或接口或函数指针来实现。其实.net 3.x以后的版本也提供了类似的功能,一个叫LINQ(Language Integrated Query )的东东。可以使用类似SQL的方式过滤集合

    LINQQuery: string[]names={"Geoff","Jessica","Mike","Megan", "Priscilla","Jack","Alma"}; IEnumerableexpr=fromsinnames wheres.Length==5 orderbys selects.ToUpper(); foreach(stringiteminexpr) Console.WriteLine(item);

上面的用法是不是很简洁方便?用ruby来实现的话,将会是这样:

    names=["Geoff","Jessica","Mike","Megan","Priscilla", "Jack","Alma"] expr=names.select{ |n|n.length==5 }.sort.collect{|n|n.upcase} expr.each{|n|putsn}

正因为Ruby blocks如此方便,在阅读ruby程序的时候,可以看到被广泛的使用着。

梦想从来不会选择人,它是上天赋予每个人构建未来蓝图的神奇画笔。

Ruby blocks提供灵活编码手段

相关文章:

你感兴趣的文章:

标签云: