ruby几个方法学习

shitou 3 年之前

总结几个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 }
[ 本帖最后由 shitou 于 2008-9-26 14:07 编辑 ]

[ 本帖最后由 shitou 于 2008-9-26 14:14 编辑 ]

偶的ruby的书还在路上~

对ruby了解的时候是在我用 RPG Game Maker 软件时知道的

ruby 现在也有很多游戏开发方面的框架,像IRRLICHT和Gosu, 其中IRRLICHT已经能达到PSP的水准了,手有点痒痒了

发表讨论

在回复之前你需要先进行登录
记住我的登录状态 (忘记密码)