insert語句太長用StringBuilder優化一下。本站提示廣大學習愛好者:(insert語句太長用StringBuilder優化一下)文章只能為提供參考,不一定能成為您想要的結果。以下是insert語句太長用StringBuilder優化一下正文
1、甚麼是代碼塊
在Ruby中,{}或do...end之間的代碼是一個代碼塊。代碼塊只能湧現在一個辦法的後邊,它緊接在辦法最初一個參數的統一行上,由yield症結字挪用。例如:
[1,2,3,4,5].each { |i| puts i } [1,2,3,4,5].each do |i| puts i end
塊變量:以yield症結字挪用block也能夠傳遞參數,block中豎線(|)之間給出的參數名用於吸收來自yield的參數。
豎線之間(如上例中的 | i |)的變量被稱作塊變量,感化和一個正常辦法的參數一樣
2、控制代碼塊的編寫
最多見、最簡略、最富爭議、最有Ruby作風的方法是blocks。寫法以下:
array = [1, 2, 3, 4] array.collect! do |n| n ** 2 end puts array.inspect # => [1, 4, 9, 16]
do…end組成一個block。然後把這個block經由過程collect!傳給一個數組。便可以應用block中的n來迭代數組中每一個元素。
collect!是Ruby庫裡的辦法,上面我們來寫一個本身的相似辦法iterate!
class Array def iterate! self.each_with_index do |n, i| self[i] = yield(n) end end end array = [1, 2, 3, 4] array.iterate! do |n| n ** 2 end puts array.inspect # => [1, 4, 9, 16]
起首,我們翻開Array,並添加進iterate!辦法。辦法名以!開頭表現風險辦法,惹起留意。如今我們便可能像應用collect!一樣應用iterate!
與屬性分歧,在辦法中不須要指定block的名字,而是應用yield來挪用。yield會履行block中的代碼。同時,留意我們是怎樣把n(each_with_index以後處置的數字)傳給yield的。傳給yield的參數即對應了block中的參數(||中的部門)。如今n就可以被block挪用並在yield挪用中前往n**2。
全部挪用以下:
1、一個整數構成的數組挪用iterate!
2、當yield被挪用時,把n(第一次為1,第二次為2,…)傳給block
3、block對n停止n**2。由於是最初一行,主動作為成果前往。
4、yield獲得block的成果,並把值重寫到array裡。
5、數據中每一個對象履行雷同操作。
3、{}和do...end優先級分歧
在傳遞一個block時,應用{}傳遞的block比應用do…end的優先級要高;
為了不惹起歧義,最好應用()將參數括起來。例如:
1.upto 3 do |x| puts x end
是准確的,然則 1.upto 3 {|x| puts x} 編譯欠亨過,應當寫成 1.upto(3) {|x| puts x}
緣由:
1.upto 3 do…end 中block會傳遞到upto辦法外面,3會作為一個參數傳遞給upto
1.upto 3 {|x| puts x} 一句會把3當作函數名,將block傳遞到這個函數,其前往值作為upto辦法的參數,所以編譯不外,需加()。