ruby 函数

函数

lambda? :判断proc对象是proc还是lambda
.arity :获取proc对象的参数个数,当有*修饰的可变参数时返回一个负数(-n-1),n表示对象必须有n个参数
clone :拷贝数据(冻结和受污染状态也会被拷贝)
dup :拷贝数据(不会拷贝状态)
freeze:冻结对象(冻结对象不可被改变)
frozen?: 是否被冻结
taint:污染
untaint: 接触污染
tainted?:是否被污染
4.upto(6){|x|} :integer 常用迭代器之一 #  456
4.downto(1){|x|} :integer 常用迭代器之一 #  4321
3.times{|x|} :integer 常用迭代器之一 # 012
2.3.4 :295 > 3.times
 => #  # 返回Enumerator对象
0.step :浮点数数值迭代
each{|x|} :Array Hash Range  等许多类都有此迭代器
each_with_index do |line,number|  代码区 end :基于each的迭代器
collect : 也叫做map 为所有元素执行代码块,将返回值组合到数组并返回
[1,2,3].collect{|x| x*x} # =>  [1,4,9]
select : 为所有元素执行代码块,选取返回值不是false或nil的元素组合到数组并返回
(1..10).select{|x| x%2 == 0} #=> [2,4,6,8,10]
reject : 为所有元素执行代码块,选取返回值是false或nil的元素组合到数组并返回
(1..10).reject{|x| x%2 == 0} #=> [1,3,5,7,9]
inject : 第一个参数是上次迭代的返回值,第二个参事是迭代对象的下一个元素
data = [2,5,3,4]
data.inject {|sum,x| sum+x}   # => 14 (2+5+3+4)
data.inject(1.0){|p,x| p*x} # => 120.0  (1.0*2*5*3*4)
data.inject {|m,x| m>x? m : x} # => 5
枚举器的方法:Enumerable  
obj.to_enum :实例枚举器的常用方法,object对象的(不带代码块)
obj.enum_for(:each_char).map{|c| c.succ} : 带代码块
2.3.4 :291 > s = "hello"
 => "hello" 
2.3.4 :292 > s.enum_for(:each_char).map{|x| x.succ}
 => ["i", "f", "m", "m", "p"] 
2.3.4 :293 > 
str.chars : char数组
iterator = 9.downto(1)
begin
  p iterator.next while true
  rescue StopIteration
  p "finsh"
end   :外部迭代器的写法,外部迭代器比内部迭代器更加的灵活
iterator = 9.downto(1)
loop do
  p iterator.next
end :简化rescue从句而包含的一个隐式从句外部迭代器语句
2.3.4 :008 > def itttttt(xxxxx)
2.3.4 :009?>   loop do
2.3.4 :010 >       yield xxxxx.next
2.3.4 :011?>     end
2.3.4 :012?>   end
 => :itttttt 
2.3.4 :013 > itttttt(9.downto(1)){|x| p x} # => 9 8 7 6 5 4 3 2 1

函数解析

array[0]  # same as:array.[] 0    array 有个名为[]的函数,参数只有一个 0
array[0]='aaaa' #same as: array.[]= 0,'aaaa'  array有个名为[]= 的函数 参数有两个0,'aaaa'
obj.m = v # 解释器解释为  obj.m= {v}
o.m += 1 # same as: o.m=(o.m()+1)
o[x] -= 2 # same as: o.[]= (x,o.[](x) - 2)

操作符

  1. 展开操作符:*
    右值以开头,则意味他是一个数组,她的每个元素都应该是一个右值
    左值以
    开头(左侧只能有一个*),则意味所有多出来的右值都放入一个数组且赋给该左值
2.3.4 :186 >   x,y,z = 1,*[2,3] #same as:x,y,z = 1,2,3
 => [1, 2, 3] 
2.3.4 :187 > x
 => 1 
2.3.4 :188 > y
 => 2 
2.3.4 :189 > z
 => 3 
2.3.4 :190 > x,*y = 1,2,3
 => [1, 2, 3] 
2.3.4 :191 > x
 => 1 
2.3.4 :192 > y
 => [2, 3] 
  1. 追加 位移:<< >>
    二进制左右位移
2.3.4 :220 > 172.to_s(2)
 => "10101100" 
2.3.4 :221 > two = 172.to_s(2).to_i(2)
 => 172 
2.3.4 :222 > two >> 1
 => 86 
2.3.4 :223 > 86.to_s(2)
 => "1010110" 
2.3.4 :224 > two << 1
 => 344 
2.3.4 :225 > 344.to_s(2)
 => "101011000" 
2.3.4 :226 > 

字符串追加:

2.3.4 :212 > message = "message"
 => "message" 
2.3.4 :213 > message << "is mes"
 => "messageis mes" 
2.3.4 :214 > message
 => "messageis mes" 
2.3.4 :215 > 

===,=,! :这三个我特么也不是很懂啊。。。。

你可能感兴趣的:(ruby 函数)