总结几个ruby中的方法
Kernel#test
偶然遇到的,曾经看过的几本书中都没有提到,非常好用, 尤其用在system manage方面
>test(?C, 'a.txt') #返回文件a.txt最近的变动时间
>test(:d, 'a.txt') #返回a.txt是不是目录
支持很多操作,非常类似于shell中的test(即[]), 不过功能更多,更多的操作符查看ri文档
bm
bm是ruby内置gem benchmark的方法,作用就是benchmark(性能测试), 使用前需要先调入
>require 'benchmark'
>include Benchmark
>a = (1..1000000).map { rand(1000000) }
>bm do |b|
> b.report("Sort") { a.sort }
> b.report("Sort by") { a.sort_by { |a| a } }
>end
report中的参数用于输出结果中的标签(label)
可以用来测试代码的实行效率,优化时使用
Enumerable#inject
用于迭代, 每次迭代将返回运算结果, 下一次迭代将跳过之前云算过的项,把上一次运算结果作为起始参数(initial)用于下次迭代, 感觉比较绕口,还是看例子吧
>(5..10).inject { |initial, n| initial + n } #45
>(5..10).inject(1) { |initial, n| initial + n } #46
上面的第一个例子没有赋予初始值,那么就开始运算5 + 6, 将结果赋予initial, 然后进行11 + 7, 依次计算
第二个initial = 1, 所以结果为46
一个复杂点的例子
找出最长的字符串
>%W(apple pear banane).inject do |x, y|
> x.length > y.length ? x : y
>end #"banana"
找出最长字符串的长度
>%W(apple pear banane).inject(0) do |x, y|
> x >= y.length ? x : y.length
>end #6
sort, sort_by
sort_by接受一个参数作为block参数, sort可以不跟block或者传递两个参数给block
>%W(apple pear banane).sort
>%W(apple pear banane).sort_by { |word| word.length }
>%W(apple pear banane).sort { |x, y| x.length <=> y.length }
上面第二个和第三个效果相同
复杂点的例子
将当前目录下的文件按照修改时间排序
>files = Dir["*"]
>files.sort { |a, b| File.new(a).mtime <=> File.new(b).mtime }
2008-09-25 14:46:28, 361 reviews
send to mailbox
just DO NOT support IE