函数
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)
操作符
- 展开操作符:*
右值以开头,则意味他是一个数组,她的每个元素都应该是一个右值
左值以开头(左侧只能有一个*),则意味所有多出来的右值都放入一个数组且赋给该左值
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]
- 追加 位移:<< >>
二进制左右位移
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 >
===,=,! :这三个我特么也不是很懂啊。。。。