ruby api 2.1新增改變

c3tc3tc3t發表於2015-12-12

-> 這個符號可以替換lambda
%i 生成符號陣列 %i(foor bar baz) #[:foo,:bar:baz]
def 定義方法 eg: def foo(x: 1); puts; end
hash {a:1,b:2}替換{:a=>1,:b=>2}
r 數字後面接r表示有理數 1.2r
Array.try_convert 轉換成陣列物件
Array.rotate 通過轉動產生陣列,將第一個元素放到最後,理解成左輪-手-槍-旋轉
Array.keep_if 刪除使程式碼塊結果為false的元素
Array#sample 選擇一個隨機元素
Array#repeated_permutation (n),使用原來陣列的元素,組合成陣列,陣列的元素數是n,然後將這些陣列再裝入一個陣列中返回,元素可以重複使用

Array#repeated_combination (n),使用原來陣列的元素,組合成陣列,陣列的元素數是n,然後將這些陣列再裝入一個陣列中返回,元素不可以重複使用

eg:
a = [1, 2, 3]
p a.repeated_combination(2).to_a # [[1, 1], [1, 2], [1, 3], [2, 2], [2, 3], [3, 3]]
p a.repeated_permutation(2).to_a #[[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3], [3, 1], [3, 2], [3, 3]]

Hash#to_h 轉換成hash物件
Hash#default_proc= 當取某個key時不能取到給一個預設值
Hash#key(value) 通過值得到key
Hash#keep_if 刪除程式碼塊為false的鍵值對

Hash#assoc 使用==搜尋與給定的key相當的鍵值對
Hash#rassoc 使用==搜尋與給定的value相當的鍵值對
Hash#flatten 將hash變成陣列

Hash#compare_by_identity 讓map的key的雜湊值作為他們的值的唯一key

h1 = { "a" => 100, "b" => 200, :c => "c" }
h1["a"] #=> 100
h1.compare_by_identity 呼叫後
h1.compare_by_identity? #=> true
h1["a".dup] #=> nil # different objects. 使用a的拷貝取不到了 ,拷貝後的字串“a”是另一個物件
h1[:c] #=> "c" # same symbols are all same. 符號總是唯一

Enumerable#to_h 轉換成hash結構
Enumerable#flat_map 陣列每個元素扔進塊裡計算,計算後返回的如果是陣列遍歷這個陣列每個元素取出來,統一放回一個陣列再返回
[1, 2, 3, 4].flat_map { |e| [e, -e] } #=> [1, -1, 2, -2, 3, -3, 4, -4]
[[1, 2], [3, 4]].flat_map { |e| e + [100] } #=> [1, 2, 100, 3, 4, 100]


Enumerable#each_entry 包含yield的語句就是迭代器方法,each_entry呼叫迭代器 將迭代其中yeild返回的資料,傳入給定的程式碼快計算,如果yeild返回多個資料,這多個資料就是一陣列形式傳入程式碼快

class Foo
include Enumerable
def each
yield 1
yield 1, 2
yield
end
end
Foo.new.each_entry{ |o| p o }


Enumerable#each_with_objec 將每個元素傳入程式碼快計算,返回給定的初始物件

evens = (1..10).each_with_object([]) { |i, a| a << i*2 }

#=> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

Enumerable#chunk 根據程式碼快結果。來判斷每個元素是否放在一起返回

[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5].chunk { |n|
n.even?
}.each { |even, ary|
p [even, ary]
}
#=> [false, [3, 1]]
# [true, [4]]
# [false, [1, 5, 9]]
# [true, [2, 6]]
# [false, [5, 3, 5]]

解釋上面程式碼: 3被取出來判斷時候是偶數,返回真假,如果是假,even=false,3放到陣列裡,此時陣列是[3]。然後接著判斷 1還是假,再放到陣列裡[3,1],
判斷到4是偶數,even=true,將4放到新陣列裡[4],將前面的[false,[3,1]]列印出來


Enumerable#slice_before 對於每個被chunked的元素依據真假,返回一個集合裡,給這個建立一個列舉器


a = [0, 2, 3, 4, 6, 7, 9]
prev = a[0]
p a.slice_before { |e|
prev, prev2 = e, prev
prev2 + 1 != e
}.map { |es|
es.length <= 2 ? es.join(",") : "#{es.first}-#{es.last}"
}.join(",")
#=> "0,2-4,6,7,9"

解釋: 1 prev=a[0] #這時prev為0
2 進入 { |e|
prev, prev2 = e, prev
prev2 + 1 != e
}
3 pre =0,prev2 =0
4 prev2 + 1 != e 為假
5 將e也就是0放進陣列,[0]
6 當便利到2時, prev2 + 1 != e 為假,然後2放入新陣列,[2],

當chunk後面塊結束後 是下面形式

[0]
[2, 3, 4]
[6, 7]
[9]
nil

然後返回這個迭代器,呼叫map 後面的塊

Enumerable#lazy 直到需要的時候再執行列舉器

Kernel#dir 檔案的目錄名

Kernel#callee 當前方法名作為符號返回

Module#class_variable_get 得到類變數的值

Module#class_variable_set 設定類變數的值
Module#remove_class_variable 移除例項變數

Module#public_constant 返回一個包含公有常量的列表
Module#private_constant 返回一個包含私有常量的列表

 


Module#singleton_class? 判斷是否是singleton類

Module#prepend include的可替換方法

Module#public_instance_method 返回包含例項方法的陣列

Object#!~ 如果兩個物件相當返回真


Object#singleton_class 返回物件singleton類
Object#untrust 標記一個物件不受信任
Object#untrusted? 如果物件是不受信任返回真
Object#trust 從物件身上移除不受信任標記

Object#remove_instance_vari
able 從物件身上移除例項變數


Object#public_send 呼叫公共方法
Object#public_method 類似method方法,只查詢public方法
Range#bsearch 陣列使用二分查詢

Socket.getifaddrs網路訪問介面

String#clear 將字串清空

String#chr 返回字串開頭字元

String#encode 將字串按照某種編碼方式編碼


String#getbyte 將字元換位整數返回

String#setbyte 使用整數設定字元

String#byteslice 擷取字元

String#scrub 移除無效的字元序列

 

相關文章