ActiveSupport::CoreExtensions 学习笔记(一)

1 ActiveSupport::CoreExtensions::Array::Conversions
1:to_formatted_s(fromate=:default)
如果不指定参数,会把数组的每一个元素连接起来。
[code] >> %w(a b).to_formatted_s
=> "ab"[/code]
如果指定了:db参数就会把数组元素的id用逗号连接输出,如果数组为空就输出为null
[code] >> %w(a b).to_formatted_s(:db)
=> "37846660,37846650"[/code]
2:to_param()
把数组用'/'连接起来
[code] >> %w(blog index).to_param()
=> "blog/index"[/code]
3:to_sentence(options = {}) 包含两个参数
:connector: 如果数组的长度大于二用指定的字符去连接最后一个字符 (default: "and")
:skip_last_comma: 设置为true 返回形式用 "a, b and c" 替换 "a, b, and c". (default: false)
[code] >> %w(blog index).to_sentence
=>"blog, and index"
>> %w(blog index).to_sentence(:connector=>"or",:skip_last_comma=>true)
=>"blog or index"[/code]
4:to_xml(options = {})
:root 指定根标签()
:children 指定子标签,如果未指定,就为root的单数形式
:indent 指定每层缩近的大小
:builder 创建一个Builder::XmlMarkup 对象
:dasherize 是否把标签名称换下化线转换为横线 <a_test> =><a-test> 默认为转换
:skip_instruct 是否忽略instruct,默认会包含
[code] >> ['blog_a'=>['b'=>'c']].to_xml(:skip_instruct=>true)
=> "<records>\n <record>\n <blog-a>\n <blog-a>\n <b>c</b>\n
</blog-a>\n </blog-a>\n </record>\n</records>\n"[/code]

2 ActiveSupport::CoreExtensions::Array::Grouping
1:in_groups_of(number, fill_with = nil) {|group| ...}
把数组分割成每组含number个元素的若干子数组。如果最后一个子数组的元素不够,
用fill_with指定的字符去替换。如果fill_with指定为false,则不会去补位空的元素。、
[code] >> %w(1 2 3 4 5 6 7).in_groups_of(3){|g| p g}
["1", "2", "3"]
["4", "5", "6"]
["7", nil, nil]
>> %w(1 2 3 4 5 6 7).in_groups_of(3,false){|g| p g}
["1", "2", "3"]
["4", "5", "6"]
["7"][/code]
2:split(value = nil, &block)
通过一个给定的value与数组里的元素对比,把value前后的元素分割子数组。还可以通过一个block去计算分割
[code] >> [1,2,3,4,5,6,7].split {|i| i%3==0}
=> [[1, 2], [4, 5], [7]]
查看源码
def split(value=nil,&block)
block ||=Proc.new{|e| e==value}
inject([[]]) do |result, element|
if block.call(element)
results<<[]
else
results.last<<element
end
results
end
enf
所以
>> [1,2,3,4,5,6,7].split(3)
=> [[1, 2], [4, 5, 6, 7]]
等于
>> [1,2,3,4,5,6,7].split {|i| i==3}
=> [[1, 2], [4, 5, 6, 7]][/code]


3 ActiveSupport::CoreExtensions::Hash
1:to_xml(options = {})
2:diff(h2)
删除给定参数Hash含相同的元素,返回一个新的数组。
[code]>> {'a'=>'100','b'=>'200','c'=>'300'}.diff({'b'=>'200'})
=> {"a"=>"100", "c"=>"300"}[/code]
3:assert_valid_keys(*valid_keys)
判断HASH的键是否只在给定的参数内,如果超出会报错,并把多余的键打印出来
[code]>> {'a'=>'100','b'=>'200',1=>'300'}.assert_valid_keys("a","b")
ArgumentError: Unknown key(s): 1[/code]
4:stringify_keys!()
强制把Hash的每一个键转换为字符,
[code]>> {'a'=>'100','b'=>'200',1=>'300'}.stringify_keys!
=> {"a"=>"100", "b"=>"200", "1"=>"300"}[/code]
5:symbolize_keys!()
强制把所有的键转换为symbols
[code]>> {'a'=>'100','b'=>'200',1=>'300'}.symbolize_keys!
=> {:b=>"200", nil=>"300", :a=>"100"}[/code]
6:reverse_merge!(other_hash)
用指定的值去替换默认的值
[code]>> {'a'=>'100',1=>'300'}.reverse_merge! 'b'=>"400"
=> {"a"=>"100", "b"=>"400", 1=>"300"}[/code]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值