Ruby blocks提供灵活编码手段
Ruby语言的出现,改变了程序员传统的编写诶代码方式,使编程人员在编写代码时会有一种非常愉悦的心情。在这里我们为大家介绍一种灵活编码手段Ruby blocks。
先来看一下这段代码:
- class SongList
- def [](key)
- return @songs[key] if
key.kind_of?(Integer) - return @songs.find {
|aSong| aSong.name == key } - end
- end
在第四行中,有find这样一个方法,可以按照指定条件对songs进行遍历,最终返回一个符合条件的个体。
下面就来看看这个方法到底是怎么实现的。
class Array def find for i in 0size value = self[i] return value if yield(value) end return nil end end
发现是在Array这个类中,增加了一个method,在method中嵌入了一个遍历操作。如果只是这样的话,那么ruby和其他语言也就没有什么差别了,我们注意到第5行中有yield,这么一个东东。其实他起到了一个代理的作用,实现了实际操作部分和遍历的分离。
再看看下面这个例子,来了解一下yield的功能。
1def threeTimes yield yield yield end threeTimes { puts "Hello" }
这里定义了名叫threeTimes的blocks, Ruby blocks中会重复3次外部的操作,当row 6的代码执行后,会得到后面的结果:
Hello
Hello
Hello
可以看到blocks为我们提供了如此灵活的手段,其实他语言中需要通过代理或接口或函数指针来实现。
其实.net 3.x以后的版本也提供了类似的功能,一个叫LINQ(Language Integrated Query )的东东。
可以使用类似SQL的方式过滤集合
LINQ Query: string[] names = { "Geoff", "Jessica", "Mike", "Megan", "Priscilla", "Jack", "Alma" }; IEnumerablestring> expr = from s in names where s.Length == 5 orderby s select s.ToUpper(); foreach (string item in expr) Console.WriteLine(item);
上面的用法是不是很简洁方便?用ruby来实现的话,将会是这样:
相关推荐
PMJ0 2020-10-13
longzhiwen 2020-09-06
yangxingstar 2020-08-31
LUCIEN0 2020-08-17
huangzihao00 2020-08-17
Jan 2020-08-17
AndesStay 2020-06-12
afengxg 2020-06-09
zamesking 2020-06-09
afengxg 2020-06-09
何志文 2020-06-09
teresalxm 2020-06-05
何志文 2020-05-16
何志文 2020-05-11
fsl 2020-05-04
JOO 2020-04-26
倩 2020-04-22
afanti 2020-04-19
始终不够 2020-04-10