国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Ruby程序語言之數字、字符串和其它(1)

2019-11-17 04:58:13
字體:
來源:轉載
供稿:網友
在Ruby中,一切都是對象。更精確地說,Ruby中的一切都是一個具有完整功能的對象。因此,在Ruby中,數字4,定點數3.14和字符串"Hi"都是對象。顯然,它們是有點"非凡"的,因為你不必使用new方法來創建它們。代之的是,你使用例如"literal 4"這樣的形式來創建一個代表數字4的對象的實例。 然而,對于絕大多數人來說,學習一種新的編程語言時,首先理解該語言提供的"標準"類型是非常有用的。所以,在這一節,我們先探討數字類型,字符串類型,布爾類型和另外一些基本的Ruby數據類型。數字類型實質上,Ruby中的數字被分為整數和浮點數兩大類。其中,整數又被進一步細分為"常規大小"的整數和大型整數。因為在Ruby中一切都是對象,所以整數和浮點數都是按類來定義的(見圖1)。從圖1看出,Numeric是所有數字類型的基類,Float和Integer類是Numeric的子類。Fixnum和Bignum都是Integer的子類型-它們分別定義了"常規大小"的整數和大型整數。Ruby程序語言之數字、字符串和其它(1)(圖一)

圖1.Ruby的數字類型類繼續圖Literal用來描述這些類的實例。下面的在交互式Ruby外殼(irb)中的代碼顯示了Float,Fixnum和Bignum的literal實例。注重,可以在literal上進行方法調用(在此,是指類方法)。irb(main):001:0>3.class

=>Fixnum

irb(main):002:0>3.4.class

=>Float

irb(main):003:0>10000000000000000000.class

=>Bignum還有另外一些語法用來創建數字類型,顯示于下面的代碼列表中。字母E可以用來描述以指數標志的數字。數字的前面加上0代表這是一個八進制數,加上0x代表這是一個十六進制數,而0b代表是一個二進制數。為清楚起見,下劃線可以用作數字中的分隔符號。注重,當寫literal時,不要用逗號作為分隔符號。在一些情況中,這實際上能生成一個數組,我們將在后面討論。最后,在一個字符(或Ctrl或元字符的組合)前面的一個問號將會創建一個Fixnum的實例,相應于字符的ASCII字符/逃逸序列值。<

irb(main):001:0>3.14E5#指數標志

=>314000.0

irb(main):002:0>054#八進制

=>44

irb(main):003:0>0x5A#十六進制

=>90

irb(main):004:0>0b1011#二進制

=>11

irb(main):005:0>10_000#10,000,用下劃線隔開

=>10000

irb(main):006:0>i=10,000#創建一個數組而不是10000Fixnum

=>[10,0]

irb(main):007:0>i.class

=>Array

irb(main):008:0>?Z#FixnumASCII值

=>90

irb(main):009:0>?Z.class

=>Fixnum

irb(main):010:0>?/C-s#Control-s的值ASCII

=>19Fixnum和Bignum實例間的真實差別是什么?Fixnum整數可以被存儲在機器中的一個字(通常16,32或64位)中,但減去1個位;而Bignum實例是超出固定存儲空間的整數。當然,作為開發者,你不必擔心整數的大小(見下面的例子),由Ruby負責為你實現Fixnum和Bignum之間的自動轉換!irb(main):001:0>i=4

=>4

irb(main):002:0>i.class

=>Fixnum

irb(main):003:0>i=i+100000000000000

=>100000000000004

irb(main):004:0>i.class

=>Bignum

irb(main):005:0>i=i-100000000000000

=>4

irb(main):006:0>i.class

=>Fixnum字符串 在Ruby中,字符串是任意順序的字節。通常,它們是一個字符序列。在Ruby中,可以使用一個literal或new方法來創建String類的實例。irb(main):001:0>s1="HelloWorld"

=>"HelloWorld"

irb(main):002:0>s2=String.new("HelloWorld")

=>"HelloWorld"當然,String中定義了許多方法(和操作符)。另外,可以使用單引號或雙引號來指定一個字符串。雙引號情況下答應串中加入逃逸字符并能夠嵌入待計算的表達式。在單引號串情況下,你看到的就是串中的實際內容。為了更好的理解,請看下列例子。irb(main):001:0>str1='a/nstring'

=>"a//nstring"

irb(main):002:0>str2="a/nstring"

=>"a/nstring"

irb(main):003:0>putsstr1

a/nstring

=>nil

irb(main):004:0>putsstr2

a

string

=>nil

irb(main):005:0>'trytoadd#{2+2}'

=>"trytoadd/#{2+2}"

irb(main):006:0>"trytoadd#{2+2}"

=>"trytoadd4"

irb(main):007:0>this="that"

=>"that"

irb(main):008:0>'whensinglequoterights#{this}'

=>"whensinglequoterights/#{this}"

irb(main):009:0>"doublequoterights#{this}"

=>"doublequoterightsthat"
請注重,在顯示之前,雙引號中的文本是如何被計算的,其中包括了逃逸符號(/n)和表達式(#{2+2})。除了使用單引號和雙引號來定義一個字符串literal外,在Ruby中,還有另外的方法可以表達literal。一個百分號和小寫或大寫字母Q可以用來表達一個字符串,分別相應于單引號或雙引號風格。irb(main):001:0>%q@thisisasinglequotestring#{2+2}here@

=>"thisisasinglequotestring/#{2+2}here"

irb(main):002:0>%Q@thisisadoublequotestring#{2+2}here@

=>"thisisadoublequotestring4here"注重,跟隨在q%或Q%后面的字符分別定義了字符串literal的開始和結束。在本例中,@符號用作字符串開始與結束的限界符號。還應該注重,Ruby并沒有區分一個字符串和一個字符。也就是說,沒有適用于單個字符的特定的類-它們僅是一些小的字符串。布爾類型最后,讓我們再看一下布爾類型。在Ruby中,有兩個類用于表達布爾類型:TrueClass和FalseClass。每個這些類僅有一個實例(一個singleton):也就是true和false。這些是可在Ruby的任何地方存取的全局值。還有一個類NilClass。NilClass也僅有一個實例nil-表示什么也沒有。然而,在布爾邏輯中,nil是false的同義詞。irb(main):001:0>truefalse

=>true

irb(main):002:0>true&false

=>false

irb(main):003:0>truenil

=>true

irb(main):004:0>true&nil

=>false QQread.com 推出各大專業服務器評測 linux服務器的安全性能 SUN服務器 HP服務器 DELL服務器 IBM服務器 聯想服務器 浪潮服務器 曙光服務器 同方服務器 華碩服務器 寶德服務器 正規表達式大多數程序語言中都使用正規表達式。基于許多腳本語言的Ruby也廣泛地使用正規表達式。我的一個同事曾經說"正規表達式太復雜了。"換句話說,你需要花費一些時間來學習正規表達式。在本文中,你僅能一瞥Ruby正規表達式的威力。在程序開發中,你不必一定使用正規表達式,但是假如使用這種工具,你的編碼將更為緊湊而輕易。而且,假如你想成為一名Ruby大師,你必須要花費其它時間來研究它。

在下面的例子中,Ruby中的正規表達式是在Tiger或菲Phil之間定義的。/TigerPhil/現在你可以在一個條件或循環語句中使用帶有一個匹配操作符("=~")的正規表達式來匹配或查找其它的字符串。irb(main):001:0>

golfer="Davis"

ifgolfer=~/TigerPhil/

puts"Thisisgoingtobealongdrive."

else

puts"Andnowadriveby"+golfer

end

=>"Davis"下面是另一個稍微復雜些的正規表達式:/[/w._%-]+@[/w.-]+.[a-zA-Z]{2,4}/你能夠猜出這個表達式代表什么意思嗎?它相應于一個電子郵件地址。這個正規表達式可以用來校驗電子郵件地址。irb(main):001:0>

emailRE=/[/w._%-]+@[/w.-]+.[a-zA-Z]{2,4}/

email="jwhite@interechtraining.com"

ifemail=~emailRE

puts"Thisisavalidemailaddress."

else

puts"thisisnotavalidemailaddress."

end

這是一個有效的電子郵件地址。

irb(main):002:0>

email="###@spammer&&&.333"

ifemail=~emailRE

puts"Thisisavalidemailaddress."

else

puts"thisisnotavalidemailaddress."

end
這不是一個有效的電子郵件地址。圖2把電子郵件正規表達式分解開來。你已看到,正規表達式語言是相當豐富的,但在此不多詳述。有關正規表達式的更多信息請參考http://www.regular-eXPRessions.info。Ruby程序語言之數字、字符串和其它(1)(圖二)

圖2.電子郵件正規表達式 注重,在Ruby中正規表達式也是一種對象。在下面的代碼示例中,一個正規表達式實例(派生自類Regexp)作為String方法的一個參數(gsub)以達到使用"glad"來替換和"happy"與"joy"之目的。irb(main):001:0>

quote="Iamsohappy.Happy,happy,joy,joy!"

regx=/(hH)appyjoy/

quote.gsub(regx,"glad")

=>"Iamsohappy.Happy,happy,joy,joy!"

=>/(hH)appyjoy/

=>"Iamsoglad.glad,glad,glad,glad!"當你在正規表達式對象上使用=~操作符時,你能夠得到例如匹配模式串的索引等信息。irb(main):001:0>/TigerPhil/=~"EyeOfTheTiger"

=>8假如你曾編寫過大量有關字符串的程序,你就會知道Ruby中的正規表達式是非常有力量的。因此,我建議在較深入地用Ruby開發你的第一個程序前,你應該全面地探討一下Ruby中的正規表達式。當然,你可以參考本文相應的
=>"A".."Z"

irb(main):002:0>r2=("A".."Z")

=>"A".."Z"當創建一個范圍時,必須指定開始值和結束值。在上面的情況中,A作為開始值,Z作為結束值。當創建一個范圍時,你還可以指示是否這個范圍應該包括或不包括末尾元素。默認情況下,如上例所示,范圍包括末尾元素。為了排除結束元素,你可以使用new方法的排除參數(置為true)或如下所示的3個點的速記標志。irb(main):001:0>r1=Range.new("A","Z",true)

=>"A"..."Z"

irb(main):002:0>r2=("A"..."Z")

=>"A"..."Z"

irb(main):003:0>r1.include?"Z"

=>false

irb(main):004:0>r2.include?"Z"

=>false上面的示例中在范圍上調用的include?方法顯示是否其參數是范圍的一個成員。上例中,"Z"不是范圍的一個元素。這個方法還有一個與之等價的操作符"==="-它實現相同的功能。irb(main):005:0>r2==="Z"

=&Gt;

false范圍被應用在Ruby編程的許多方面。它們有兩種特定的使用:作為生成器(generator)和謂詞(predicate)。作為一個生成器,在范圍上的每個方法答應你遍歷該范圍中的每個元素;例如,你想確定在一個K字節范圍中的實際字節數。下面在irb中運行的代碼使用了一個范圍作為K字節到字節的生成器。irb(main):008:0>

kilobytes=(1..10)

kilobytes.each{xputsx*1024}

=>1..10

1024

2048

3072

4096

5120

6144

7168

8192

9216

10240在Ruby中,條件邏輯范圍可以被用作謂語(predicate),通常借助于操作符===的幫助。例如,你可以使用一個范圍謂詞來測試一個相對于有效的端口號(0~65535)和保留的端口號(0~1024,不包括1024)的整數參考。irb(main):001:0>

proposedPort=8080

validPorts=(0..65535)

reservedPorts=(0...1024)

if(validPorts===proposedPort)&!(reservedPorts===proposedPort)

puts"Proposedportisoktouse."

else

puts"Proposedportisnotallowedtobeused."

end

=>8080

=>0..65535

=>0...1024
上例的結果是,建議的端口號可以使用。另外,范圍也可以用于存取數據結構(如數組和哈希表)中的元素。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新宾| 河西区| 衡阳县| 柳州市| 读书| 南汇区| 铜山县| 瑞金市| 托克托县| 承德县| 垦利县| 陇南市| 沾益县| 武汉市| 靖江市| 韶山市| 义马市| 怀远县| 达拉特旗| 都江堰市| 潼关县| 富民县| 三门县| 灯塔市| 阳原县| 五常市| 同江市| 贡觉县| 陈巴尔虎旗| 延吉市| 肥乡县| 盐城市| 鹤壁市| 美姑县| 囊谦县| 冀州市| 华宁县| 隆德县| 南康市| 镇安县| 清苑县|