最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Terry七月Ruby讀書筆記(比較詳細(xì))第4/4頁

 更新時(shí)間:2008年11月18日 00:18:08   作者:  
今年7月讀《Ruby語言入門教程v1.0》時(shí)的讀書筆記,靜靜地面對(duì)電腦,嘗試一種新的語言,是一種淡然的快樂。

復(fù)雜數(shù)據(jù)類型

1.      數(shù)組

(1)      建立數(shù)組

¨         array_1=[]

¨         array_2=Array.new

¨         array_3=['3 ','4 ','5 ']

(2)      訪問元素

arr=[3,4,5,6,7,8,9]

Ruby以整數(shù)作為下標(biāo),訪問數(shù)組元素通過數(shù)組下標(biāo),數(shù)組下標(biāo)稱作數(shù)組索引比較好一些。

數(shù)組的索引從0開始(arr[0]),一直到數(shù)組的長(zhǎng)度減去1,如:arr[arr.length-1]或arr[arr.size-1]);

負(fù)數(shù)表示從數(shù)組末尾開始的索引,如:arr[-1]。

用一對(duì)數(shù)字索引數(shù)組,第一個(gè)數(shù)字表示起始位置,第二數(shù)字表示從起始位置開始的元素?cái)?shù)目。如:arr[2..4],arr[-3,2]。

arr.first,arr.last分別代表第一個(gè)和最后一個(gè)元素。

(3)      增刪元素

Ruby的數(shù)組大小是動(dòng)態(tài)的,你能夠隨時(shí)增加、刪除數(shù)組元素。

print arr.join(", "),"\n"  意思是:將數(shù)組 arr轉(zhuǎn)換成字符串輸出,用", "隔開每個(gè)

元素,并且換行。

arr=[3,4,5] 

print arr      #輸出:345

print arr.join(", ")    #輸出:3,4,5

(4)      數(shù)組運(yùn)算

arr1=["abc",1,2,"de"]

arr2=[2,3,4,7,6,5]

運(yùn)算

運(yùn)算表達(dá)式

輸出結(jié)果

print arr1+arr2

abc12de234765

print arr2-arr1

34765

print arr1*2

abc12deabc12de

print arr1|arr2

abc12de34765

print arr1&arr2

2

排序

print arr2.sort

234567

倒置

print arr1.reverse

de21abc

 

2.      字符串

(1)      生成一個(gè)字符串

字符串是 String 類的對(duì)象,一般使用字符串值來創(chuàng)建。

%q用來生成單引號(hào)字符串;

%Q用來生成雙引號(hào)字符串。

%q或者%Q后面跟著的是分隔符,可以是配對(duì)的!!;//;<>;();[];{};等等。

字符串文檔,從<<和文檔結(jié)束符的下一行開始,直至一個(gè)放置在行首的文檔結(jié)束符結(jié)束。文檔結(jié)束符自己指定,結(jié)束符本身不屬于字符串。

注意:文檔結(jié)束符后面不能跟有空格。

一個(gè)數(shù)組可以用join方法轉(zhuǎn)換成字符串,join()內(nèi)的參數(shù)也是一個(gè)字符串,用來分隔數(shù)組的每個(gè)元素,例如:arr.join(",")。

(2)      字符串操作

字符串既然是String類的對(duì)象,String類的方法你都可以使用在字符串變量上。

(3)      字符串轉(zhuǎn)義

雙引號(hào)括起來的字符串會(huì)有轉(zhuǎn)義,例如:“\n”表示換行。

單引號(hào)括起來的字符串不會(huì)轉(zhuǎn)義,有一個(gè)例外:?jiǎn)我?hào)字符串里的單引號(hào),需要轉(zhuǎn)義。

(4)      字符串內(nèi)嵌表達(dá)式

在雙引號(hào)字符串中,不僅可以使用轉(zhuǎn)義符,而且可以在#{   }之中放入Ruby表達(dá)式,使用字符串時(shí),這些表達(dá)式的值被計(jì)算并放入字符串。

字符串內(nèi)嵌表達(dá)式,使得你能夠更加靈活地組織代碼,表現(xiàn)出更強(qiáng)、更多的動(dòng)態(tài)特性。

3.      代碼塊

可以用大括號(hào){  }將代碼組織成塊,也可以用 do…end 將代碼組織成塊。大括號(hào){  }的優(yōu)先級(jí)高于 do…end。代碼塊,簡(jiǎn)稱塊。

yield [ji:ld] 產(chǎn)生,輸出……

注意:{}或者do…end之間的是塊。

 

#E8.4-1.rb

def one_block

  yield

  yield

  yield

end

 

one_block { puts "This is a block." }

代碼塊

把塊作為參數(shù),帶入到def定義中的yield處即可。

調(diào)用一次塊要用關(guān)鍵字yield。每一次yield,塊就被調(diào)用一次。

yield還可以帶參數(shù)調(diào)用塊,yield后面是實(shí)參,塊定義處是形參。

 一個(gè)塊可以接收yield傳來的參數(shù),還可以將結(jié)果返回給調(diào)用它的方法。

如果我們還沒有決定在塊里寫什么代碼,或者塊里的代碼會(huì)隨著不同的情形而變化,那么就看出代碼塊的靈活性了。

先寫出方法的大致框架,調(diào)用方法的時(shí)候才告訴方法要作什么。

 

4.      迭代器

迭代器是一個(gè)與代碼塊有關(guān)聯(lián)的方法。

(1..9).each {|i| print  i  if  i<7}

迭代器 each 是數(shù)組類的一個(gè)方法;大括號(hào){  }里的代碼是代碼塊。

 

 

 

 

class Array   

  def  one_by_one 

    for i in 0...size  

      yield(self[i] )  

    end 

    puts    

  end  

end

 

arr = [1,3,5,7,9]

arr.one_by_one {|k| print  k ,  ", "}    # 1, 3, 5, 7, 9,

arr.one_by_one {|h| print h*h,   ", "}     # 1, 9, 25, 49, 81,

 

5.      閉包

代碼塊是一段代碼,相當(dāng)于一個(gè)匿名方法,被調(diào)用它的方法所調(diào)用。

如果我們不僅僅想調(diào)用代碼塊,還想把代碼塊作為參數(shù)傳遞給其它方法,就要使用閉包。

閉包也是一段代碼,一個(gè)代碼塊,而且能夠共享其它方法的局部變量。

閉包既然是一段代碼,也就有自己的狀態(tài),屬性,作用范圍,也就是一個(gè)可以通過變量引用的對(duì)象,我們稱之為過程對(duì)象。

一個(gè)過程對(duì)象用 proc 創(chuàng)建,用 call 方法來調(diào)用。

¨         閉包作為參數(shù)傳遞給其它方法

以下兩個(gè)程序相同

程序1

程序2

def method(pr)  

  puts pr.call(7)   

end

 

oneProc=proc{|k|  k *=3}

method(oneProc)

oneProc=proc{|k|  k *=3}

 

puts oneProc.call(7)

#過程對(duì)象oneProc作為一個(gè)參數(shù),傳遞給method;

 

 

¨         閉包共享其它方法局部變量

def method(n)

  return  proc{|i|  n +=i }

end

 

oneProc=method(3)

puts oneProc.call(9)     #12

puts oneProc.call(5)     #17

方法method返回一個(gè)Proc對(duì)象,這個(gè)對(duì)象引用了函數(shù)的參數(shù)n。即使參數(shù)n在閉包被調(diào)用時(shí)已經(jīng)不在自己的作用域里,這個(gè)閉包還是可以訪問參數(shù)n,并且和方法method共同擁有變量n。開始時(shí)方法method的變量n是3;oneProc.call(9)的時(shí)候,oneProc 更新了變量n,把n=12 傳回給方法method;oneProc.call(5)的時(shí)候,oneProc取出方法 method 的變量 n=12,更新為n=17,傳回給方法method的同時(shí),也把n=17作為自己的返回值輸出。

正則表達(dá)式

正則表達(dá)式(regular expression)描述了一種字符串匹配的模式,可以用來檢查一個(gè)串是否含有某種子串;將匹配的子串做替換;或者從某個(gè)串中取出符合某個(gè)條件的子串;等等。

Ruby 中,可以使用構(gòu)造器顯式地創(chuàng)建一個(gè)正則表達(dá)式,也可以使用字面值形式 /正則模式/  來創(chuàng)建一個(gè)正則表達(dá)式。

 

=~

匹配一個(gè)正則表達(dá)式:用來比較是否符合一個(gè)正則表達(dá)式,返回模式在字符串中被匹配到的位置,否則返回nil。

!~

不匹配一個(gè)正則表達(dá)式:用來斷言不符合一個(gè)正則表達(dá)式,返回true,flase。

 

一些字符或字符組合在正則表達(dá)式中有特殊的意義。

特別字符

描述

( )

標(biāo)記一個(gè)子表達(dá)式的開始和結(jié)束位置。子表達(dá)式可以獲取供以后使用。要匹配這些字符,請(qǐng)使用 \( 和 \)。

[]

范圍描述符 (比如,[a - z] 表示在 a 到 z 范圍內(nèi)的一個(gè)字母),要匹配 [,請(qǐng)使用\[。

{}

標(biāo)記限定符表達(dá)式。要匹配{,請(qǐng)使用 \{。

\

將下一個(gè)字符標(biāo)記為或特殊字符、或原義字符、或向后引用、或八進(jìn)制轉(zhuǎn)義符。例如, 'n'匹配字符 'n'。'\n'匹配換行符。序列 '\\'匹配 "\",而 '\('則匹配 "("。

|

指明兩項(xiàng)之間的一個(gè)選擇。要匹配 |,請(qǐng)使用 \|。

.

匹配除換行符 \n之外的任何單字符。要匹配 .,請(qǐng)使用 \。

 

非打印字符

非打印字符

描述

\f

匹配一個(gè)換頁符。等價(jià)于\x0c。

\n

匹配一個(gè)換行符。等價(jià)于\x0a。

\r

匹配一個(gè)回車符。等價(jià)于\x0d。

\s

匹配任何空白字符,包括空格、制表符、換頁符等等。等價(jià)于[\f\n\r\t\v]。

\S

匹配任何非空白字符。等價(jià)于[^\f\n\r\t\v]。

\t

匹配一個(gè)制表符。等價(jià)于\x09。

\w

匹配包括下劃線的任何單詞字符。等價(jià)于'[A-Za-z0-9_]'字母或數(shù)字;相當(dāng)于[0-9A-Za-z]

\W

匹配任何非單詞字符。等價(jià)于'[^A-Za-z0-9_]'非字母,數(shù)字

\d

匹配一個(gè)數(shù)字字符。等價(jià)于[0-9]。[0-9]數(shù)字;相當(dāng)于[0-9]

\D

匹配一個(gè)非數(shù)字字符。等價(jià)于[^0-9]。非數(shù)字字符

\b

退格符(0x08)(僅在范圍描述符內(nèi)部時(shí))

 

限定符

限定符用來指定正則表達(dá)式的一個(gè)給定組件必須要出現(xiàn)多少次才能滿足匹配。

*  和 + 限定符都是貪婪的,因?yàn)樗鼈儠?huì)盡可能多的匹配文字,只有在它們的后面加上一個(gè) ?  就可以實(shí)現(xiàn)非貪婪或最小匹配。

 

限定符

描述

*

前面元素出現(xiàn)0或多次。* 等價(jià)于{0,}。

例如,zo*能匹配 "z"以及 "zoo"。

要匹配 * 字符,請(qǐng)使用 \*。

+

前面元素出現(xiàn)1或多次。+ 等價(jià)于{1,}。

例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。

要匹配 + 字符,請(qǐng)使用 \+。

?

前面元素最多出現(xiàn)1次;相當(dāng)于 {0,1}。

例如,”do(es)?” 可以匹配 “do” 或 “does” 中的"do" 。

要匹配 ? 字符,請(qǐng)使用 \?。

{n}

n 是一個(gè)非負(fù)整數(shù)。匹配確定的 n 。

例如,'o{2}'  不能匹配 "Bob" 中的 'o',但是能匹配 "food"中的兩個(gè)o。

{n,}

n 是一個(gè)非負(fù)整數(shù)。至少匹配n 。'o{1,}' 等價(jià)于 'o+'。'o{0,}' 則等價(jià)于 'o*'。

例如,'o{2,}' 不能匹配 "Bob"中的 'o',但能匹配 "foooood"中的所有 o。

{n,m}

m 和 n 均為非負(fù)整數(shù),其中n <= m。前面元素最少出現(xiàn)n 次,最多出現(xiàn) m次。

'o{0,1}'等價(jià)于 'o?'。請(qǐng)注意在逗號(hào)和兩個(gè)數(shù)之間不能有空格。

例如,"o{1,3}"將匹配 "fooooood"中的前三個(gè) o。

 

定位符

 

用來描述字符串或單詞的邊界,^和$分別指字符串的開始與結(jié)束,\b描述單詞的前或后邊界,\B表示非單詞邊界。不能對(duì)定位符使用限定符。

定位符

描述

^

匹配輸入字符串的開始位置,除非在方括號(hào)表達(dá)式中使用,此時(shí)它表示不接受該字符集合。要匹配^字符本身,請(qǐng)使用\^。

$

匹配輸入字符串的結(jié)尾位置。如果設(shè)置了RegExp對(duì)象的Multiline屬性,則$也匹配'\n'或'\r'。要匹配$字符本身,請(qǐng)使用\$。

\b

匹配一個(gè)單詞邊界,也就是指單詞和空格間的位置。例如,'er\b'可以匹配"never"中的'er',但不能匹配"verb"中的'er'。

\B

匹配非單詞邊界。'er\B'能匹配"verb"中的'er',但不能匹配"never"中的'er'

 

各種操作符的運(yùn)算優(yōu)先級(jí)

相同優(yōu)先級(jí)的從左到右進(jìn)行運(yùn)算,不同優(yōu)先級(jí)的運(yùn)算先高后低。各種操作符的優(yōu)先級(jí)從高到低如下:

優(yōu)先級(jí)

操作符

描述

\

轉(zhuǎn)義符

 

(),[]

圓括號(hào)和方括號(hào)

 

*,+,?,{n},{n,},{n,m}

限定符

 

^,$,

位置和順序

|

“或”操作

 

 

元編程

元編程:編寫能夠生成程序的程序。

聽起來很有趣!

Ruby語言強(qiáng)大的動(dòng)態(tài)特征,賦予了我們靈活地進(jìn)行元編程的能力。

相關(guān)文章

  • Ruby解析處理YAML和json格式數(shù)據(jù)

    Ruby解析處理YAML和json格式數(shù)據(jù)

    這篇文章主要介紹了Ruby對(duì)YAML和json格式的數(shù)據(jù)處理方法,json序列化、json反序列化,json解析等操作,需要的朋友可以參考下
    2022-04-04
  • Ruby簡(jiǎn)明教程之循環(huán)語句介紹

    Ruby簡(jiǎn)明教程之循環(huán)語句介紹

    這篇文章主要介紹了Ruby簡(jiǎn)明教程之循環(huán)語句介紹,非常簡(jiǎn)潔的講解,可以作為語法備忘,需要的朋友可以參考下
    2014-06-06
  • ruby中的雙等號(hào)==問題詳解

    ruby中的雙等號(hào)==問題詳解

    Ruby里面有4種比較方法,equal?, eql?, ==, ===,而且在不同的類里面表現(xiàn)的很不一樣。在使用的時(shí)候也特別容易搞糊涂。 本文先給大家講述一下==號(hào)的用法及使用中應(yīng)該注意的地方
    2016-02-02
  • 淺談Ruby on Rails的國際化

    淺談Ruby on Rails的國際化

    這篇文章主要介紹了Ruby on Rails的國際化,提出了日期貨幣等格式相關(guān)需要注意的地方,需要的朋友可以參考下
    2015-08-08
  • rudy 方法 分析

    rudy 方法 分析

    rudy 方法 分析...
    2007-11-11
  • Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例

    這篇文章主要介紹了Ruby設(shè)計(jì)模式編程中使用Builder建造者模式的實(shí)例,建造者模式將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示,需要的朋友可以參考下
    2016-03-03
  • 初步了解一下什么是ruby

    初步了解一下什么是ruby

    了解下什么是ruby,希望學(xué)習(xí)ruby的朋友了解下
    2008-06-06
  • Ruby實(shí)現(xiàn)發(fā)送郵件的兩個(gè)方法

    Ruby實(shí)現(xiàn)發(fā)送郵件的兩個(gè)方法

    這篇文章主要介紹了Ruby實(shí)現(xiàn)發(fā)送郵件的兩個(gè)方法,本文講解了使用Net::SMTP、使用ruby gem:mail兩種方法實(shí)現(xiàn)郵件發(fā)送,需要的朋友可以參考下
    2015-01-01
  • Ruby實(shí)現(xiàn)的3種快速排序算法

    Ruby實(shí)現(xiàn)的3種快速排序算法

    這篇文章主要介紹了Ruby實(shí)現(xiàn)的3種快速排序算法,本文給出了快速排序的普通版本、快速排序的隨機(jī)化版本、快速排序的利用了Ruby的語法糖的隨機(jī)化版本三個(gè)版本,需要的朋友可以參考下
    2015-05-05
  • Ruby中Hash哈希結(jié)構(gòu)的基本操作方法小結(jié)

    Ruby中Hash哈希結(jié)構(gòu)的基本操作方法小結(jié)

    Hash是一種鍵值對(duì)應(yīng)的數(shù)據(jù)結(jié)構(gòu),Ruby中直接帶有Hash類來對(duì)其提供支持,這里我們整理了Ruby中Hash哈希結(jié)構(gòu)的基本操作方法小結(jié),首先來回顧一下Hash的基本知識(shí):
    2016-06-06

最新評(píng)論

巧家县| 遂昌县| 阳江市| 马关县| 改则县| 淮南市| 泰顺县| 萍乡市| 鹤峰县| 永仁县| 巫山县| 永丰县| 昭平县| 精河县| 永年县| 桃江县| 平江县| 荥阳市| 招远市| 年辖:市辖区| 南和县| 阳原县| 酒泉市| 定结县| 井研县| 紫金县| 扎兰屯市| 深州市| 长白| 琼结县| 鹤壁市| 工布江达县| 姜堰市| 伊宁市| 九台市| 洛川县| 中阳县| 洞口县| 和龙市| 澄城县| 花莲市|