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

首頁(yè) > 編程 > Ruby > 正文

Ruby基礎(chǔ)知識(shí)之?dāng)?shù)據(jù)類型

2020-10-29 19:41:01
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、數(shù)值類型

(1)整型
整型分兩種,如果在31位以內(nèi)(四字節(jié)),那為Fixnum實(shí)例。如果超過(guò),即為Bignum實(shí)例。

復(fù)制代碼 代碼如下:

#整型 Integer 以下是一些整型字面量
#字面量(literal):代碼中能見(jiàn)到的值,數(shù)值,bool值,字符串等都叫字面量
#如以下的0,1_000_000,0xa等
a1=0
#帶千分符的整型
a2=1_000_000
#其它進(jìn)制的表示
a3=0xa
puts a1,a2
puts a3
#puts print 都是向控制臺(tái)打印字符,其中puts帶回車換行符
=begin
這是注釋,稱作:嵌入式文檔注釋
類似C#中的/**/
=end

(2)浮點(diǎn)型
復(fù)制代碼 代碼如下:

#浮點(diǎn)型
f1=0.0
f2=2.1
f3=1000000.1
puts f3 

浮點(diǎn)有個(gè)圓整錯(cuò)誤,例如:0.4-0.3==0.1
這是不等的。C#中也是如此(采用IEEE-754浮點(diǎn)的都是如此)。因?yàn)楹芏喔↑c(diǎn)數(shù)是用一種近似值來(lái)表示的。例如0.1,它只是無(wú)限接近0.1。因?yàn)?.1不能用二進(jìn)制精確表示。但0.5可以。
復(fù)制代碼 代碼如下:

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)算術(shù)操作
加減乘除操作符:+-*/;指數(shù)操作符為**
指數(shù)不必是整數(shù),例如
復(fù)制代碼 代碼如下:

#指數(shù)算術(shù)
puts 2**(1/4)#1與4的商為0,然后2的0次方為1
puts 16**(1/4.0)#1與4.0的商為0.25(四分之一),然后開(kāi)四次方根

(二)字符串類型
字符串型可以用單引號(hào)或雙引號(hào)表示。兩種表式方法雙引號(hào)推薦使用:雙引號(hào)轉(zhuǎn)義字符全;雙引號(hào)中的字面量可以包含表達(dá)式。
字符串內(nèi)插格式為:#{}
復(fù)制代碼 代碼如下:

name="Ruby"
puts name
puts "#{name+",ok"}"

字符串分界符
可以通過(guò)字符串分界符來(lái)定義字符串字面量。
%q用于單引號(hào)規(guī)則
%Q用于雙引號(hào)規(guī)則
分界符成對(duì)出現(xiàn)的,例如:(),[],{},兩個(gè)!!。如果使用!做為分界符,其中字面量中又出現(xiàn)了!號(hào),那么,需要/!來(lái)轉(zhuǎn)義。當(dāng)然,如果其中的字面量中出現(xiàn)了成對(duì)的分界符(其實(shí)是做為操作符出現(xiàn)的),那不需要轉(zhuǎn)義的。
復(fù)制代碼 代碼如下:

#分界符
s1=%Q[this ''/ssss123]
puts s1
#字面量中有分界符,一般情況下要做轉(zhuǎn)義操作
s2=%Q!this ''/ssss123/!/!!
puts s2
#字面量中有成對(duì)的分界符出現(xiàn),可以不做轉(zhuǎn)義
s3=%Q(2*(1+1))
puts s3

在大字符串字面量中,不可保證分界符不出現(xiàn)。在ruby中支持header document。即通過(guò)定義分界字符串來(lái)定義字面量,可大大保證成功率。
通過(guò)<<或<<-緊臨header 來(lái)定義,且結(jié)束段單獨(dú)一行。如果通過(guò)<<-來(lái)定義的,則結(jié)束行前可加空白符。例如:
復(fù)制代碼 代碼如下:

#分界字符串
s1=<<Header
sdfie''''//////[]
Header
puts s1

字符串操作
(1)用+號(hào)進(jìn)行字符串連接。對(duì)于不是字符串的需要to_s方法進(jìn)行顯示轉(zhuǎn)換,才能用于連接。注意的是,連接后的字符串會(huì)新建一個(gè)對(duì)象返回。
(2)用<<號(hào)進(jìn)行字符串連接。此操作符連接字符串,是修改左側(cè)字符串,而不新建對(duì)象。
(3)用*號(hào)表示重復(fù)左側(cè)字符串,
(4)字符串截取
通過(guò)[]來(lái)訪問(wèn)字符串中的子字符串。字符串可以作為字符數(shù)組來(lái)看待。如果索引為負(fù)數(shù),則從右向左取字符。(在1.8和1.9中通過(guò)[]訪問(wèn)返回的不同,1.9中取的更符合習(xí)慣)
通過(guò)[]索引訪問(wèn)進(jìn)行賦值操作,可以替換字符。
通過(guò)[]中兩個(gè)值進(jìn)行訪問(wèn),可以截取子字符串
(5)通過(guò)range截取子字符串。
通過(guò)range表示的兩個(gè)都是索引,這個(gè)區(qū)別于[]中以逗號(hào)分隔的一個(gè)用于索引,另一個(gè)用于長(zhǎng)度。
[..]或[…]
其中兩個(gè)點(diǎn)的為包含區(qū)間。
(5)通過(guò)索引字符串,來(lái)判斷包含關(guān)系
通過(guò)[“字符串']來(lái)判斷是否包含此子字符串
(三)字符類型

字符類型通過(guò)?+字符來(lái)定義。

(四)數(shù)組

數(shù)組字面量通過(guò)[]中以逗號(hào)分隔定義,且支持range定義。同時(shí),數(shù)組字面量引用同%q,%Q類似的%w,%W分界符。中間以空格分隔。
(1)數(shù)組通過(guò)[]索引訪問(wèn)
同字符串相似,數(shù)據(jù)通過(guò)索引進(jìn)行訪問(wèn)。如果有兩個(gè)數(shù)值,則一個(gè)表示索引,另一個(gè)表示元素個(gè)數(shù)
(2)通過(guò)賦值操作插入、刪除、替換元素
(3)通過(guò)+,-號(hào)進(jìn)行合并和刪除元素,且集合做為新集合出現(xiàn)
(4)通過(guò)<<號(hào)向原數(shù)據(jù)追加元素
(5)通過(guò)*號(hào)重復(fù)數(shù)組元素
(6)通過(guò)|和&符號(hào)做并集和交集操作(注意順序)
(五)哈希類型
哈希字面量由逗號(hào)分隔的kv對(duì)來(lái)定義,被包括在花括號(hào)之間,kv對(duì)以=>來(lái)定義

復(fù)制代碼 代碼如下:

#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]

(六)范圍類型
通過(guò)..或…符號(hào)定義范圍類型,它有順序性。
(七)true,false,nil
比較nil值,可以通過(guò):
Ojb==nil或
Obj.nil?
(八)對(duì)象標(biāo)識(shí)、對(duì)象的類、類型
對(duì)象標(biāo)識(shí)在1.9中可以通過(guò):
__id__得到,或object_id
 
對(duì)象的類:
復(fù)制代碼 代碼如下:

Obj.class==String或
Obj.instance_of? String
 
x1="ok"
puts x1.class==String
puts x1.instance_of?String

判斷是不是一種類型的實(shí)例也可通過(guò):is_a?或===
復(fù)制代碼 代碼如下:

x1="ok"

puts x1.is_a?String
puts x1===String


(九)對(duì)象凍結(jié)、污染
通過(guò)freeze凍結(jié)對(duì)象,被凍結(jié)對(duì)象將不可變(所有內(nèi)部狀態(tài)都不可變)。如果類被凍結(jié),則類不能添加方法。
通過(guò)taint污染對(duì)象,被污染的對(duì)象會(huì)成為污染源(源自它的對(duì)象都是被污染的)。通過(guò)untaint進(jìn)行解除污染。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 伊川县| 普陀区| 通化县| 汉中市| 昆明市| 元谋县| 新安县| 淮阳县| 田林县| 三门县| 泾阳县| 梁平县| 永胜县| 九寨沟县| 丰原市| 白城市| 靖边县| 温泉县| 托克逊县| 胶南市| 塘沽区| 临夏市| 岳阳县| 芦山县| 嘉善县| 灵寿县| 林口县| 长葛市| 神木县| 澎湖县| 军事| 鸡东县| 辽宁省| 溧阳市| 东城区| 南丰县| 大理市| 深水埗区| 湄潭县| 板桥市| 繁昌县|