一、數實值型別
(1)整型
整型分兩種,如果在31位以內(四位元組),那為Fixnum執行個體。如果超過,即為Bignum執行個體。
複製代碼 代碼如下:
#整型 Integer 以下是一些整型字面量
#字面量(literal):代碼中能見到的值,數值,bool值,字串等都叫字面量
#如以下的0,1_000_000,0xa等
a1=0
#帶千分符的整型
a2=1_000_000
#其它進位的表示
a3=0xa
puts a1,a2
puts a3
#puts print 都是向控制台列印字元,其中puts帶斷行符號分行符號
=begin
這是注釋,稱作:嵌入式文檔注釋
類似C#中的/**/
=end
(2)浮點型
複製代碼 代碼如下:
#浮點型
f1=0.0
f2=2.1
f3=1000000.1
puts f3
浮點有個圓整錯誤,例如:0.4-0.3==0.1
這是不等的。C#中也是如此(採用IEEE-754浮點的都是如此)。因為很多浮點數是用一種近似值來表示的。例如0.1,它只是無限接近0.1。因為0.1不能用二進位精確表示。但0.5可以。
複製代碼 代碼如下:
puts 0.3-0.2==0.1 #false
puts 0.8-0.3==0.5 #true
puts 0.8-0.7==0.1 #false
(3)算術操作
加減乘除操作符:+-*/;指數操作符為**
指數不必是整數,例如
複製代碼 代碼如下:
#指數算術
puts 2**(1/4)#1與4的商為0,然後2的0次方為1
puts 16**(1/4.0)#1與4.0的商為0.25(四分之一),然後開四次方根
(二)字串類型
字串型可以用單引號或雙引號表示。兩種表式方法雙引號推薦使用:雙引號逸出字元全;雙引號中的字面量可以包含運算式。
字串插入格式為:#{}
複製代碼 代碼如下:
name="Ruby"
puts name
puts "#{name+",ok"}"
字串分界符
可以通過字串分界符來定義字串字面量。
%q用於單引號規則
%Q用於雙引號規則
分界符成對出現的,例如:(),[],{},兩個!!。如果使用!做為分界符,其中字面量中又出現了!號,那麼,需要\!來轉義。當然,如果其中的字面量中出現了成對的分界符(其實是做為操作符出現的),那不需要轉義的。
複製代碼 代碼如下:
#分界符
s1=%Q[this ''/ssss123]
puts s1
#字面量中有分界符,一般情況下要做轉義操作
s2=%Q!this ''/ssss123\!\!!
puts s2
#字面量中有成對的分界符出現,可以不做轉義
s3=%Q(2*(1+1))
puts s3
在大字串字面量中,不可保證分界符不出現。在ruby中支援header document。即通過定義分界字串來定義字面量,可大大保證成功率。
通過<<或<<-緊臨header 來定義,且結束段單獨一行。如果通過<<-來定義的,則結束行前可加空白符。例如:
複製代碼 代碼如下:
#分界字串
s1=<<Header
sdfie''''//////[]
Header
puts s1
字串操作
(1)用+號進行字串串連。對於不是字串的需要to_s方法進行顯示轉換,才能用於串連。注意的是,串連後的字串會建立一個對象返回。
(2)用<<號進行字串串連。此操作符連接字串,是修改左側字串,而不建立對象。
(3)用*號表示重複左側字串,
(4)字串截取
通過[]來訪問字串中的子字串。字串可以作為字元數組來看待。如果索引為負數,則從右向左取字元。(在1.8和1.9中通過[]訪問返回的不同,1.9中取的更符合習慣)
通過[]索引訪問進行賦值操作,可以替換字元。
通過[]中兩個值進行訪問,可以截取子字串
(5)通過range截取子字串。
通過range表示的兩個都是索引,這個區別於[]中以逗號分隔的一個用於索引,另一個用於長度。
[..]或[…]
其中兩個點的為包含區間。
(5)通過索引字串,來判斷內含項目關聯性
通過[“字串']來判斷是否包含此子字串
(三)字元類型
字元類型通過?+字元來定義。
(四)數組
數組字面量通過[]中以逗號分隔定義,且支援range定義。同時,數組字面量引用同%q,%Q類似的%w,%W分界符。中間以空格分隔。
(1)數組通過[]索引訪問
同字串相似,資料通過索引進行訪問。如果有兩個數值,則一個表示索引,另一個表示元素個數
(2)通過賦值操作插入、刪除、替換元素
(3)通過+,-號進行合并和刪除元素,且集合做為新集合出現
(4)通過<<號向原資料追加元素
(5)通過*號重複數組元素
(6)通過|和&符號做並集和交集操作(注意順序)
(五)雜湊類型
雜湊字面量由逗號分隔的kv對來定義,被包括在花括弧之間,kv對以=>來定義
複製代碼 代碼如下:
#hash
h1={"a1"=>1,"a2"=>2}
h2={:a1=>3,:a2=>4}
h3={a1:5,a2:6}
puts h1["a1"]
puts h2[:a1]
puts h3[:a1]
(六)範圍類型
通過..或…符號定義範圍類型,它有順序性。
(七)true,false,nil
比較nil值,可以通過:
Ojb==nil或
Obj.nil?
(八)對象標識、對象的類、類型
對象標識在1.9中可以通過:
__id__得到,或object_id
對象的類:
複製代碼 代碼如下:
Obj.class==String或
Obj.instance_of? String
x1="ok"
puts x1.class==String
puts x1.instance_of?String
判斷是不是一種類型的執行個體也可通過:is_a?或===
複製代碼 代碼如下:
x1="ok"
puts x1.is_a?String
puts x1===String
(九)對象凍結、汙染
通過freeze凍結對象,被凍結對象將不可變(所有內部狀態都不可變)。如果類被凍結,則類不能添加方法。
通過taint汙染對象,被汙染的對象會成為汙染源(源自它的對象都是被汙染的)。通過untaint進行解除汙染。