Ruby基礎知識小結

1. 簡單描述OOP編程中對象、繼承、多態概念。 正則表達式

(1)對象就是人們在編寫代碼來解決現實世界中的問題時,要進行研究的任何事物。 編程

(2)繼承是描述客觀世界的類之間的一種關係,是子類自動共享父類的數據結構和方法而且在新加的子類中有不一樣於父類的特徵和能力。 數組

(3)多態是不一樣的對象,收到同一消息能夠產生不一樣的結果。例如,貓和狗兩個子類都繼承動物這個父類的「叫」的方法,可是貓「叫」和狗「叫」是不一樣的,即不一樣的結果。 數據結構

2. 列成Ruby中全部的關鍵字。 less

類別函數

關鍵字單元測試

模塊定義測試

moduleui

類定義this

class

方法定義

def,undef

檢查類型

defined?

條件語句

if,then,else,elsif,case,when,unless

循環語句

for,in,while,until,next,break,do,redo,retry,yield

邏輯判斷

not,and,or

邏輯值

true,false

空值

nil

異常處理

rescue,ensure

對象引用

super,self

塊的起始結束

begin/end

嵌入模塊

BEGIN,END

文件相關

__FILE__,__LINE__

方法返回

return

別名

alias

3. 歸納Ruby中變量和標識符的命名規則。

(1) 變量的定義無需指定類型,只能包含字母、數字、下劃線,但只能以字母或下劃線開頭。

(2) 經過區分Ruby變量名的首字符來區分它是局部變量、實例變量、類變量和全局變量,其中類變量以@@開頭,實例變量以@開頭,全局變量以$開頭。

1. 比較下面各組符號的優先級。

Ruby的運算符列舉如表所示(按照優先級從高到低的順序):

clip_image002

a) ::和[]

::的優先級高於[]

b) >= 和==

>=的優先級高於==

c) ?:和||

邏輯或||優先級高於三元運算符?=

d) +和&&

+的優先級高於邏輯與&&

2. 聲明一個字符串實例化,實例名爲str,初始值爲」this is a string.」。請用4種方法分別對str進行初始化。

答:代碼以下

#Method1

str ="this is a string."

puts str

#Method2

str1 = str

puts str1

#Method3

str2 = String.new("this is a string.")

puts str2

#Method4

str3 = String.new

str3 << "this is a string."

puts str3

其運行結果以下:

clip_image004

3. 寫一個程序,把字符串」this is a string.」中的」is 」所有替換成」si」

答:程序代碼和運行結果以下

clip_image006

4. 寫一個程序,刪除字符串」FujitsuManual」中重複字符」u」

答:程序代碼和運行結果以下

clip_image008

5. 解釋正則表達式中以下標記的含義:

$, \w, \b,{m,n},?,*,\d,\s,[],^, . ,+

元字符

說明

$

匹配行尾

\w

匹配字母或數字或下劃線或漢字

\b

在括號外時,匹配單詞的邊界;在括號內匹配回格符 (backspace)

{m,n}

匹配至少n次,最多m次

?

匹配零次或一次

*

匹配零次或屢次

\d

匹配數字

\s

匹配任意的空白符

[…]

匹配方括號內的全部單個字符

^

匹配字符串的開始,即行首

.

匹配除換行符之外的任意字符

+

匹配至少一次

 

1. 舉例說明正則表達式的三種初始化方法。

答:代碼以下

#舉例說明正則表達式的三種初始化方法,實質都是新建了一個Regexp的類

#Method1 在//之間,要進行轉義

pattern = /Fu/

puts pattern =~ "Fujitsu" # =~返回第一個匹配的位置

#Method2 在%r{}內,不用進行轉義

pattern =%r{u}

puts pattern =~ "Fujitsu"

#Method3 Regexp.new()內,不用進行轉義

pattern = Regexp.new("ji")

puts pattern =~ "Fujitsu"

其運行結果以下:

clip_image002[4]

2. 寫一個正則表達式,用來匹配身份證號碼。

答:代碼以下

#一個簡單的身份證驗證的正則表達式:15位號碼應全爲數字,18位號碼末位能夠爲數字或X

#沒有使用

regex=/(^\d{15}$)|(^\d{17}([0-9]|[xX])$)/

puts regex.match("511028123411111234")

puts regex.match("51102812341111123X")

puts regex.match("51102812341111123x")

puts regex.match("511028123456789")

puts regex.match("5110281234111112a4")

puts regex.match("511028123")

其運行結果以下:

clip_image004[5]

 

1. Ruby中用2、8、十六進制表示整數時,分別用什麼前綴來表示

答:

(1) 二進制前綴:0b或0B

(2) 八進制前綴:以0開頭並且後面沒有其餘字母的整數爲八進制

(3) 十六進制前綴:0x或0X

例如:

clip_image002[6]

2. rand函數的做用是什麼

答:

全局函數Kernel.rand產生隨機數。若不帶參數或當參數n屬於(-1,1)時,它返回一個大於0.0 而小於1.0的僞隨機浮點數。若給定一個整數參數max,它返回一個大於0而小於|max|的僞隨機整數。

3. 下面兩個表達式各表示什麼意思

0..100

0...100

答:

(1)0..100:用數學表示閉區間[0,100]。

(2)0…100:用數學表示左閉右開區間[0,100)。

示例代碼:

a=1..5 #表示[1,5]

b=6...10 #表示[6,10)

# 使用「===」操做符,比較某一個數值(右側操做數)是否在一個範圍內(左操做數)

# 若在範圍內,返回true;反之,返回false。

puts a===1 # =>true

puts a===5 # =>true

puts b===6 # =>true

puts b===10 # =>false

4. 在Ruby中,符號是哪一個類的實例,其語法以及最多見的用途分別是什麼

答:(1)在Ruby中,符號是Symbol類的實例。

(2)建立一個Symbol對象的方法是在標識符或者字符串前面加上冒號。

:symbol # A Symbol literal

:"symbol" # The same literal

:'another long symbol' # Quotes are useful for symbols with spaces

s = "string"

sym = :"#{s}" # The Symbol :string

(3)Symbol的最多見用途:

對於Symbol對象,名字(相同內容的字符串)相同,則Symbol相同;名字不一樣,則Symbol不一樣。Symbol對象一旦定義將一直存在,直到程序執行退出。所以,當咱們着重於將字符串做爲一個獨一無二的標識符,而不在於其內容的時候,使用符號,好比:AM和:PM。

5. 如何把範圍0...10轉換爲數組,轉換以後的數組是什麼

答:

把範圍0…10轉換成數組的方法是to_a。轉換後的數組爲[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

clip_image004[7]

6. ('bar'..'bat').to_a的值是什麼

答: p ('bar'..'bat').to_a的值爲["bar", "bas", "bat"]

7. 從系統中獲取時間,而後判斷當前年份是不是閏年,寫一程序實現。

答:

# 閏年的條件是:

#(1)公元年數如能被4整除,而不能被100整除,則是閏年;

#(2)公元年數能被400整除也是閏年;

time_now = Time.now

year_now=time_now.year

if (year_now%4 == 0 && year_now%100 != 0) || year_now%400 == 0

puts "#{year_now} is leap year"

else

puts "#{year_now} is not leap year! "

end

運行結果以下:

clip_image006[5]

1. Array.new(3)的值是什麼?

答:查詢API獲得

clip_image002[8]

Array.new(3)的值是一個長度爲3的新數組。

2. 數組a=[1,2,3,4,5],a[1]、a[-1]的值分別是多少。

答:以下圖所示,數組的索引下標從左到右時從0開始增長,從右到左時從-1開始減小。

clip_image004[9]

3. 數組[1,nil,nil,2,3,nil]的長度是多少?

答:該數組的長度爲6

clip_image006[7]

4. 寫程序實現把數組[5,3,7,2,1,10]由小到大進行排序的功能。

答:根據查看Array的API文檔,以下:

clip_image008[5]

故使用sort方法,程序以下:

clip_image010

5. 寫程序實現找出在數組[3,4,1,10]中,而不在數組[3,4,6,7,8]中的元素的功能。

答: 設數組a=[3,4,1,10],數組b=[3,4,6,7,8]。那麼出如今數組a中不在數組b中的元素就能夠用a-b表示,查詢API得:

clip_image012

代碼和運行結果以下:

clip_image014

6.寫程序實現刪除數組[1,3,5,6,7]中元素5的功能。

答:查看Array的API得,

clip_image016

Array的delete方法能夠刪除數組中指定的元素,並且經過查看源代碼可得delete方法是遍歷整個數組,所以會刪除所有重複的待刪除元素。

程序代碼以及結果以下:

clip_image018

7. 寫程序實現刪除數組[1,2,3,3,4,5,5]中重複元素的功能

答:查看Array的API,使用方法uniq能夠達到去除重複元素的功能。

clip_image020

程序代碼和運行結果以下:

clip_image022

8. 寫程序實現功能:初始化一個hash,對hash 進行遍歷,並打印每組鍵和值。

答: 查詢hash的API得,能夠經過each進行迭代輸出每組鍵和值

clip_image024

程序代碼和運行結果以下:

# Create and initialize a new hash object

h = { "one" => 1, "two" => 2, "three" => 3 }

# Iterative output each key-value pair

h.each{|key,value| puts "#{key} => #{value}"}

運行結果以下:

clip_image026

9. 寫程序,使用Test::Unit對如下各函數進行單元測試

class Foo

def is_foo?

"foo"

end

def is_bar?

"bar"

end

end

答: 首先建立一個Foo類的Test Case,以下:

clip_image028

單元測試代碼以下:

require 'foo'

require 'test/unit'

class FooTest < Test::Unit::TestCase

def test_is_foo?

assert_equal("foo",Foo.new.is_foo?)

end

def test_is_bar?

assert_equal("bar",Foo.new.is_bar?)

end

end

相關文章
相關標籤/搜索