Ruby之基礎資料型別 (Elementary Data Type)(三)

來源:互聯網
上載者:User

標籤:

前言

上一節我們介紹了常量以及變數的用法,這一節我們開始來介紹Ruby中的一些基本類型。

數實值型別(Fixnum、Bignum、Float)

  Ruby的數實值型別包括整數和浮點數。整數包括Fixnum和Bignum兩種類型,其中Fixnum可以容納比一個物理字長少一位的整數。當一個整數超過Fixnum範圍時,它會自動轉換成Bignum類型,而Bignum類型的範圍只能被實體記憶體所限制。

  如果對一個Bignum類型的整數進行算術計算,最後的結果使得它可以用一個Fixnum儲存,那麼結果就會一個Fixnum對象返回。

 下面我們來看看這段代碼:

class Test  # 定義一個名為a的變數,值為2的30次方減1  a = 1073741823  puts a.class  # 定義一個名為b的變數值為2的30次方  b = 1073741824  puts b.classend

結果輸出:

FixnumBignum

(1)通常來說,定義一個變數的值為大於或等於2的30次方的整數時,系統自動將其設為Bignum類型;如果小於該值,則設定為Fixnum類型。

(2)整數前面可以帶一個可選的符號標記(用以指定是正數還是負數)、一個可選的進位標記符(0代表十進位,0x代表十六進位,0b代表二進位),然後跟一串相應進位的數字串。

(3)若在數值中使用底線,則數值中的底線將被忽略。

(4)注意:Ruby裡的基礎資料型別 (Elementary Data Type)也就是一個對象,如在JS中,我們擷取一個數值的絕對值用的Math.abs(5),而在Ruby中5就是一個對象,則其取絕對值,則是5.abs(),由此可以看出Ruby才是真正的物件導向,一切皆對象。

所有整數實際上是Fixnum或者Bignum類的執行個體,因此完全可以執行這兩個類的方法,比如迭代器,如times、upto、downto、step,以此來取代傳統的for迴圈。如:

class Test  # 迭代輸出三次  3.times{print "X "}  puts "\n"  # 從1迭代到5  1.upto(5){ |i| print i," "}  puts "\n"end

 (5)通過在ASCII字串前添加“?”來擷取它對應的整數值,注意因為問號“?”後面跟的是ASCII字元而不是字串,因此不需要使用引號,也不能有多個字元。

class Test  puts ?aend

當你運行時,你會驚喜發現居然輸出a,後得知原來這是在Ruby1.8是這麼用的,之後是這麼用的

class Test  puts "a".ord  # 或者  puts ?a.getbyte(0)end

(5)通過字串前加英文問號(?),然後取getbyte(0)即可或者通過給ASCII字串加上雙引號然後調用ord方法即可。

(6)當使用科學計數法來表示浮點數時,如果e的前面部分是一個整數,則要麼完全忽略小數點,要麼在小數點後增加0。如下所示

class Test  puts 5e2  puts 5.0e2end

若是  puts 5.e2 肯定會報錯,我們前面講到數值也是對象,此時會將5作為對象,然後調用e2方法,但該方法根本不存在,則出錯。

字串 (String)

在Ruby語言中,字串是String類的執行個體,因此任意的字串變數、常量都可調用String類的執行個體方法,String類可能是Ruby中最大的內建類,它有超過75個標準方法,足以說明其是一個非常重要的類。其實在Ruby在單引號的字串和雙引號的字串本質上是相同的,只不過用雙引號會免去許多不必要的操作所帶來的麻煩。

class Test  a = "Hello World"  b = ‘Hello World‘  puts a == bend

通過列印出true知,都是一樣的。

字串的%標記法

若我們希望一個字串是有多行字串組成,則可以使用"%"標記法。“%”標記法一共有三種方法:

(1)%/stuff/

(2)%Q/stuff/

(3)%q/stuff/

上述(1)和(2)用法一樣,斜杠代表分隔字元也可以為括弧。

下面以%Q和%q來進行示範:

class Test # 定義一個全域變數  $global = "Ruby"  # 使用%Q/stuff/來產生多行字串  a = %Q/  Hello,Ruby  Ruby is Simple Language  Ruby On Rais #{$global}/  # 使用%q/stuff/來產生多行字串  b = %q{  Hello,Ruby  Ruby is Simple Language  Ruby On Rais #{$global}}  puts a  puts bend

  #{$global} 為插值運算式利用定義的全域變數進行替換,在上述中當使用花括弧時,此時插值運算式將會失效。

多行字串的字面值 

Ruby也提供了一種多行字串的表現形式,這種文法也被成為Here Document。Here Document的最常用文法格式如下:

class Test  <<標識符  stuff標識符end

下面我們來舉個例子:

$global = 123# 使用Here Document定義了一個字串puts <<Here    這是一個多行常值內容    使用Here文檔文法    Sum = #{$global + 1}Here

結果列印出:

    這是一個多行常值內容    使用Here文檔文法    Sum = 124

一般我們建議將結尾的<<進行頂格書寫。

數組 (Array)

Ruby中的數組可以使用一系列在方括弧中用逗號分隔的對象引用來定義,方括弧的最後一個逗號會被忽略。如下所示:

a = [4, 5 , "Hello World"]

注意:Ruby語言裡數組的長度是可變的,當我們指定中間某個數組元素的值後,會導致該元素前面沒有指定值的數組元素的值都是nil。

Ruby裡的數組是Array類的執行個體,我們可以通過建立Array類的執行個體來建立數組,如下所示:

my_array = Array.new
數組的%表示方法 

Ruby語言還可以把一個包含多個空格的字串轉換成數組。Ruby會把空格當成數組分隔字元,每個空格分隔的子串都會被當成一個數組元素。如果我們需要將多個空格的字串轉換成數組,則需要使用"%w{...}或者%W{...}"標記法,這兩種方法功能大致相同,但是"%W{...}"會進行更多額外的替換。

$global = 6my_array = %w(Hellow Ruby On Rails,      Ruby\ on\ Rails Is Funny! #{$global})my_array2 = %W(Hellow Ruby On Rails,      Ruby\ on\ Rails Is Funny! #{$global})p my_arrayp my_array2

結果列印:

["Hellow", "Ruby", "On", "Rails,", "Ruby on Rails", "Is", "Funny!", "\#{$global}"]["Hellow", "Ruby", "On", "Rails,", "Ruby on Rails", "Is", "Funny!", "6"]
數組常用方法

(1)截取數組的字數組

# 定義一個Range對象my_range = 1..9# 將Range對象轉換成數組對象my_array = my_range.to_ap my_array# 從數組的第3個元素開始截取,共截取2個元素p my_array[2, 2]# 從數組的第3個元素開始截取,截取到第5個元素,包含第5個元素p my_array[2..4]# 從數組的第3個元素開始截取,截取到第5個元素,不包含第5個元素p my_array[2...4]

輸出:

[1, 2, 3, 4, 5, 6, 7, 8, 9][3, 4][3, 4, 5][3, 4]

(2)為多個數組賦值

# 定義一個Range對象my_range = 1..9# 將Range對象轉換成數組對象my_array = my_range.to_a# 從第3個元素開始,一共將2個元素替換成一個字串元素my_array[2, 2] = "Ruby"p my_array# 從第3個元素開始,一共將1個元素替換成2個元素my_array[2, 1] = ["Hello", "World"]p my_array# 將第3個元素、第4個元素替換成7、8、9三個元素my_array[2..3] = [7, 8, 9]p my_array

列印出:

[1, 2, "Ruby", 5, 6, 7, 8, 9][1, 2, "Hello", "World", 5, 6, 7, 8, 9][1, 2, 7, 8, 9, 5, 6, 7, 8, 9]
範圍 (Range)

範圍是多個枚舉的一種表現形式,建立該枚舉形式的範圍有兩種形式。

(1)值1..值2:定義一個值1到值2的範圍,包括值1和值2,也包括值1和值2中間的值。

(2)值1...值2:定義一個值1到值2的範圍,包括值1但不包括值2,也包括值1和值2中間的值。

常用方法

(1)to_a():將該範圍轉換成一個數組。

(2)include()?(Targetvalue)===(tagetValue):判斷該範圍是否包含了tagetValue。

(3)min()/begin()/first():求該範圍的最小值(第一個值)。

(4)max()/end()/last():求該範圍的 最大值(最後一個值)。

以下為常用的迭代器方法:

(1)reject:將該範圍轉換成一個數組,並剔除掉滿足條件的元素。

class Test  # 使用...定義範圍,則該範圍不包括終點  a = 2...10  # 將範圍轉換成數組,且排除不滿足條件的元素  print a.reject {|i| i < 5}  puts "\n"end

列印出: [5, 6, 7, 8, 9] 

(2)select:將該範圍轉換成一個數組,只選擇滿足條件的元素。

class Test  # 使用...定義範圍,則該範圍不包括終點  a = 2...10  # 將範圍轉換成數組,且只選擇滿足後麵條件的元素  print a.select {|i| i < 5}  puts "\n"end

列印出: [2, 3, 4] 

(3)each:迭代範圍裡的每個元素。

class Test  # 使用...定義範圍,則該範圍不包括終點  a = 2...10  # 使用each迭代輸出範圍裡的每個元素  a.each do |ele|    puts "當前元素時:" + ele.to_s  endend

列印出:

當前元素時:2當前元素時:3當前元素時:4當前元素時:5當前元素時:6當前元素時:7當前元素時:8當前元素時:9
結語 

這一節我們細講並學完基礎資料型別 (Elementary Data Type),下一節我們將進入運算式和語句。

Ruby之基礎資料型別 (Elementary Data Type)(三)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.