1,與java,c#等語言中的try…catch…finally…throw 相對應, ruby中用begin/end …rescue…ensure … raise 來處理異常,retry可以用在rescue中。可以只用rescue或是ensure,兩者都使用時,rescue必須在ensure前。
2,$arr <<num 的含義是:將num作為數組的一個元素加入到$arr中。
3,類名首字母要大寫,如student,方法名和參數名應該用一個小寫字母開頭或者用一個底線開頭,如talk,is_prime。
4,@age.to_s的含義是:將數@age轉換為字串。
5,initialize是初始化方法,相當於構造器。attr_writer與attr_reader是getter與setter的簡寫形式。attr_accessor:a相當於attr_reader:a; attr_writer:a.
6,class student < person 指的是student類繼承person類。子類繼承父類的時候,除了重寫方法,也可以添加一些新的方法,或是增強父類的方法(用關鍵字super指明)。
7,ruby語言只有重寫,沒有完全意義上的重載。
8,ruby 語言中,一個變數被賦予了某個資料類型的值,在程式中你可以隨時再賦予這個變數其它資料類型的值。
9,ruby 是動態語言,你可以改變 ruby 程式的結構,功能,在ruby程式運行中。方法、屬性可以被加入或去除,新的類或對象可以被建立,新的模組可以出現。
10,方法預設都是公有的(initialize除外,它永遠都是私人的)。
11,定義模組用module...end 。模組與類非常相似,但是:
a) 模組不可以有執行個體對象。
b) 模組不可以有子類。
調用一個模組方法,與定義模組方法一樣,要在方法名前加上模組名和一個點號“.”。模組方法提供了一個途徑,在模組的外部存取模組內部方法,無須 include 模組。
12,include 方法為一個類的所有對象包含某個模組; extend 方法為一個類的某個對象包含某個模組
13,require包含檔案,只載入一次,遇到同一檔案時自動忽略;不同路徑下的同名檔案會多次載入。 load包含檔案,載入多次,即使是相同路徑下同一檔案。
14,print arr.join(", "),"n" 意思是:將數組arr轉換成字串輸出,用", "隔開每個元素,並且換行。一個數組可以用join 方法轉換成字串,join( ) 內的參數也是一個字串,用來分隔數組的每個元素,例如:arr.join(", ")。
15,%q 用來產生單引號字串;%q用來產生雙引號字串。%q或者%q後面跟著的是分隔字元,可以是配對的! !; / /; < >; ( ); [ ] ;{ };等等。
16,ruby中,可以使用構造器顯式地建立一個Regex,也可以使用字面值形式 /正則模式/ 來建立一個Regex。
匹配一個Regex,用“=~” ,不能用“==”。 “=~”用來比較是否符合一個Regex,返回模式在字串中被匹配到的位置,否則返回nil。
不匹配一個Regex,用“!~” ,不能用“!=”。 “!~”用來斷言不符合一個Regex,返回 true,flase。
ruby 語言的冗餘性、缺陷性和動態性正是現實世界的真實寫照
1,與java,c#等語言中的try…catch…finally…throw 相對應, ruby中用begin/end …rescue…ensure … raise 來處理異常,retry可以用在rescue中。可以只用rescue或是ensure,兩者都使用時,rescue必須在ensure前。
2,$arr <<num 的含義是:將num作為數組的一個元素加入到$arr中。
3,類名首字母要大寫,如student,方法名和參數名應該用一個小寫字母開頭或者用一個底線開頭,如talk,is_prime。
4,@age.to_s的含義是:將數@age轉換為字串。
5,initialize是初始化方法,相當於構造器。attr_writer與attr_reader是getter與setter的簡寫形式。attr_accessor:a相當於attr_reader:a; attr_writer:a.
6,class student < person 指的是student類繼承person類。子類繼承父類的時候,除了重寫方法,也可以添加一些新的方法,或是增強父類的方法(用關鍵字super指明)。
7,ruby語言只有重寫,沒有完全意義上的重載。
8,ruby 語言中,一個變數被賦予了某個資料類型的值,在程式中你可以隨時再賦予這個變數其它資料類型的值。
9,ruby 是動態語言,你可以改變 ruby 程式的結構,功能,在ruby程式運行中。方法、屬性可以被加入或去除,新的類或對象可以被建立,新的模組可以出現。
10,方法預設都是公有的(initialize除外,它永遠都是私人的)。
11,定義模組用module...end 。模組與類非常相似,但是:
a) 模組不可以有執行個體對象。
b) 模組不可以有子類。
調用一個模組方法,與定義模組方法一樣,要在方法名前加上模組名和一個點號“.”。模組方法提供了一個途徑,在模組的外部存取模組內部方法,無須 include 模組。
12,include 方法為一個類的所有對象包含某個模組; extend 方法為一個類的某個對象包含某個模組
13,require包含檔案,只載入一次,遇到同一檔案時自動忽略;不同路徑下的同名檔案會多次載入。 load包含檔案,載入多次,即使是相同路徑下同一檔案。
14,print arr.join(", "),"n" 意思是:將數組arr轉換成字串輸出,用", "隔開每個元素,並且換行。一個數組可以用join 方法轉換成字串,join( ) 內的參數也是一個字串,用來分隔數組的每個元素,例如:arr.join(", ")。
15,%q 用來產生單引號字串;%q用來產生雙引號字串。%q或者%q後面跟著的是分隔字元,可以是配對的! !; / /; < >; ( ); [ ] ;{ };等等。
16,ruby中,可以使用構造器顯式地建立一個Regex,也可以使用字面值形式 /正則模式/ 來建立一個Regex。
匹配一個Regex,用“=~” ,不能用“==”。 “=~”用來比較是否符合一個Regex,返回模式在字串中被匹配到的位置,否則返回nil。
不匹配一個Regex,用“!~” ,不能用“!=”。 “!~”用來斷言不符合一個Regex,返回 true,flase。
ruby 語言的冗餘性、缺陷性和動態性正是現實世界的真實寫照
#ruby_pratice_注釋.rb 從#開始到行尾單行注釋
puts 3/5
=begin
puts 3/5
多行注釋可以用=begin和=end;
這也是ruby的內嵌文檔rdoc注釋,類似javadoc
可以用命令ri從源檔案生產文檔
=end
2,標識名和變數
ruby的標識名區分大小寫。關鍵字,不能用來當作常量,變數,方法,類或模組的名字。
ruby使用一個約定來協助它區別一個名字的用法:名字前面的第一個字元表明這個名字的用法。局部變數、方法參數和方法名稱應該用一個小寫字母開頭或者用一個底線開頭;全域變數用美元符作為首碼 $;而執行個體變數用 @ 開頭;類變數用 @@ 開頭;類名、模組名和常量應該用大寫字母開頭。
3,資料類型
ruby 資料類型有數字,字串,數組,雜湊表,區間,Regex。
數字類型有整數型,浮點型。其中浮點型資料小數點後必須加數字。
字串型是在‘’或者“”之間。
數組的下標也是從0開始,但不同的是ruby數組的元素可以是不同類型的。如:[1,2.2,"hello",[1,2,3]]。
區間:1..4 表示1,2,3,4;1...4表示1,2,3。
4,ruby基本的賦值用“=”來完成。
如a=1,b=1+1 結果為:a=1,b=2
==比較兩個值是否相等,返回true,false 如:a=1; b=1.0; a==b #true
eql?比較兩個對象的值、類型是否相等,返回true,false 如:a=1; b=1.0; a.eql?(b) #flase(a為整數型,b為浮點型)
equal?比較兩個對象在記憶體中地址是否相同,返回true,false 如:a=1.0; b=1.0; a.equal?(b) #flase a=1.0; b=a ; a.equal?(b) # true
<=> 比較兩個對象的大小,大於、等於、小於 分別返回1,0,-1
=== 右邊的對象是否在左邊區間之內,返回 true, flase
=~(匹配)用來比較是否符合一個Regex,返回模式在字串中被匹配到的位置,否則返回 nil
!~ (不匹配) 斷言不符合一個Regex,返回 true, flase
<= < > >= 小於等於 小於 大於 大於等於
5,迴圈
while,for,case,break等同c、c#、java大同小異,下面是一些比較特別的:times , upto , downto , each ,step
3.times { print "hi!" } #hi!hi!hi!
1.upto(9) {|i| print i if i<7 } #123456
9.downto(1){|i| print i if i<7 } #654321
(1..9).each {|i| print i if i<7} #123456
0.step(11,3) {|i| print i } #0369
6,異常與線程
與c#、java中的try…catch…finally…throw 相對應, ruby中用begin/end …rescue…ensure … raise 來處理異常,retry可以用在rescue中。可以只用rescue或是ensure,兩者都使用時,rescue必須在ensure前。