ruby杂余方法

来源:互联网 发布:datagrip mac 编辑:程序博客网 时间:2024/05/16 15:58
很困很困睡觉睡觉!厕所里洗了一把脸,虽然消除了些困意,但还是有些疲倦。最近几个月对自己太松懈。昨天经海波提醒,觉得该收收心了。手里没有项目,充实一下自己。给自己充充电!上午写了两篇,感觉收获不少!继续!!!

以下方法虽然用处不多,即使用到也可以查找api。不过觉得还是总结一下吧。好记性不如烂笔头。顺便治治我的困意。一举两得!

Grouping

Array#in_groups_of(size, fill_with) 将数组的元素分组,组成固定大小的组:

(1..8).to_a.in_groups_of(3) # [[1, 2, 3], [4, 5, 6], [7, 8, nil]](1..8).to_a.in_groups_of(3, 0) # [[1, 2, 3], [4, 5, 6], [7, 8, 0]](1..8).to_a.in_groups_of(3, 0) # [[1, 2, 3], [4, 5, 6], [7, 8]]

Array#split在某个数值或者集合的结果处,分割一个数组:

(1..8).to_a.split(4) # [[1, 2, 3], [5, 6, 7, 8]](1..8).to_a.split{ |i| i == 2 } # [[1], [3, 5, 6, 7, 8]]

是不是可以和别人显摆一下?下面还有更多的magic!

Random selection
Array#rand随机返回数组中的一个元素
(1..10).map{ (1..10).to_a.rand } # [2, 7, 5, 3, 3, 2, 2, 1, 7, 6]

时间
Time.nowTime.now - 3.days5.hous.from_now1.month.ago

Enumerable
(1..5).to_a.group_by { |x| x % 3 } # 猜猜看结果,如果猜对,会有奖品# 哈哈答案如下{0 => [3], 1 => [1, 4], 2 => [2, 5]} # 基于block的执行结果把值分组到Hash中(1..5).to_a.index_by { |x| x % 3}  # 这结果呢?想一下。。。# 输出{ 0=>3, 1=>4, 2=>5} # 基于block的执行结果把值索引到Hash中。与group_by不同的是,每个索引键只保留一下值

Range
Range#include?顾名思义,检查一个Range是否包含:
(1..10).include?(3) # true(1..10).include?(15) # false
Range#overlaps?检查一下范围是否与另一个区间交叠
(1..10).overlaps?(3..15) # true(1..10).overlaps?(13..15) # false

String
String#tableize 转换类名成表名(在ActiveRecord中)。String#classify转换表名成类名
$KCODE = "u" # 先记一下有这个东东 'abc'[1] # 98'abc'[1, 2] # bc'abc'.first(1)'abc'.last(1) 
。。。。。。 字符串的函数太多了。

Symbol#to_proc
ActiveSupport只给Symbol定义了一个扩展,但它却是很强大的,提供了使用Symbol#to_proc将一个Symbol转换为一个Proc的能力。这个惯用法在整个Rails中广泛使用。代码示例如下:
(1..5).map{|i| i.to_s}
如果使用Symbol#to_proc就是下面这样:
(1..5).map(&:to_s)
& symbol告诉Ruby把symbol :to_s当作一个block参数,Ruby知道这个参数应当是一个Proc,试着调用to_proc方法把它转换成Proc。ActiveSupport提供了Symbol#to_proc方法,它返回同样类型的一个Proc。当它被调用时,它在自己的第一个参数上调用指定的方法。

顿时清爽了很多!!困病好了〜〜 做程序还是有很多好处的!

0 0