rails 对 ruby 的扩展
1 对象扩展
rails 对 ruby 的扩展 将 ruby 对象转化成 json 格式 :
对象为: new (“ rails “, [10,10,9,1] ) #=> 对象 .to_json 对象变成了 ["rails",[10,10,9,1]]
2 空值检测扩展
检查对象是否为空:对象 .blank? 空则返回 false 不空则返回 true
3 枚举数组扩展
集合 .group_by { |post| post.author_id }对集合进行分组。返回一个 hash ,键为对象的 author_id, 每个键所对应的值为 author_id 对应的数组
集合 .sum{|order| order.value} 对集合中每一个对象的 value 值进行加和
4 字符串扩展
1 )连接字符串
“ Jack”+”wang” #=>”jackwang”
2 )字符串乘法
“happy”*3 #=>”happyhappyhappy”
3 )字符串比较 ( 实际是对字符 ASCII 值进行比较 )
“x”>”y” #=>false
“y”>”x” #=>true
4 )求字符串 ASCII 值用 ?字符串
?x #=>#120
?y #=>#121
5 )数字代表的字符
120.chr #=>x
121.chr #=>y
6 )需要替换的表达式放入 # {}
x=5 y=6 puts “#{x}+#{y}” #=>5+6
7 )字符串中插入字符串变量
man=”jack”
“#{man} is handsome” #=>jake is handsome
8 )字符串常用方法
“jack”.capitalize #=>Jack
“Jack”.downcase #=>jack
“Jack”.chop #=>jac 去掉最后一个字母
“Jack”.hash #=>540559965
“Jack”.next #=>jacl 最后一字符 ASCII 加 1
“Jack”.reverse #=>kcaJ 将字母倒序输出
“Jack”.sum #=>337 每个字母的 ASCII 值相加
“Jack”.swapcase #=>jACK 字母大小写取反
“Jack”.upcase #=>JACK 将字母全部转换成大写
“jack”[0,2] #=>ja
“jack”.slice(0,2) #=>ja
“hello”.count(“l”) #=>2
9 )替换字符串的某一范围内的值
a=”hello world”
a[1,3]=”jack” #=>a 的值为 Hjacko world
10 )删除字符串
“hello”.delete(“l”,”lo”) #=>he
11 )判断空
a=””
a.empty? #=>true
b=”jack”
b.empty? #=>false
12 )以 replace 来替换字符串中所有与 pattern 相匹配的部分
“hello”.gsub(/[aeiou]/, ‘*’) #=>h*ll*
13 )用 replace 来替换首次匹配 pattern 的部分
“hello”.sub(/[aeiou]/, ‘*’) #=>h*llo
14 )判断包含指定字符串 ( 指定的是字符串,若下例中指定 ”ho” 则也不成 )
“hello”.include? “lo” #=>true
“hello”.include? “a” #=>false
15 )返回搜索到指定字符串左侧位置
“hello”.index(‘lo’) #=>3
“hello”.index(‘a’) #=>nil
16 )对字符串中各行迭代操作,对各个字节进行迭代操作
“Hi\nRuby”.each {|s| puts s} #=>Hi Ruby
“Hi\nRuby”.each_line {|s| puts s} #=>Hi Ruby
“Hi\nRuby”.each_byte {|s| puts s} #=>72 105 10 82 117 98 121
17 )拆分字符串
“mellow yellow”.split(“ello”) #=>m,w y,w
18 )压缩重复的字符串
“yellow moon”.squeeze #=>yelow mon
19 )删除头部和尾部的所有空白字符。空白字符是指 ””t”r”n”f”v”
“ hello ”.strip #=>hello
20 )字符串的遍历
字符串对象 .at(2) 选择字符串中第 3 个字符
字符串对象 .from(8) 选择第 8 位开始以后的字符串
字符串对象 .to(8) 选择第 8 位字符串之前的字符串
字符串对象 .first 选择字符串中第一位字符
字符串对象 .first(3) 选择前 3 位字符
字符串对象 .last 选择最后一个字符
字符串对象 .last(3) 选择后 3 个字符串
字符串对象 .starts_with?(“no”) 是否以 no 开头 返回 true 或 false
字符串对象 .ends_with?(“me”) 是否以 me 结尾 返回 true 或 false
字符串对象 .each_char {|ch| …..} 遍历字符串中每一个字符
字符串对象 .pluralize 将字符串转化成复数
字符串对象 .singularize 将字符串转化成单数
5 数值的扩展
6 时间和日期扩展
Time.now 当前时间
Date.today 当前日期
20. 计时单位 .ago 20 分 / 时 / 天 / 星期之前
20. 计时单位 .from_now 20 分 / 时 / 天 / 星期之后
时间与数据库可以接受的字符串格式的转化
Time.now.to_s(:db) 字符串(符合时间的字符串)
将日期转化成数据库可以接受的字符串格式
Date.today.to_s(:db)
时间日期相互转化
Time.now.to_date Date.today.to_time
注:时间类型之间可以互相运算,结果是天数
7Ruby 符号的扩展
对于迭代器中{}里被迭代的对象 可以用{ & :属性}注意:只适合迭代对象的属性的。若是被迭代对象不只主要语句快执行的内容则不能够实现如:{ |ch| count[ch] }的语句快就不适合
8Unicode 扩展(见书)