函數
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: 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 >
===,=,! :這三個我特么也不是很懂啊。。。。