標籤:
前言
上一節我們介紹了常量以及變數的用法,這一節我們開始來介紹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)(三)