- Ruby是純正血統的面嚮對象語言,全部的一切,一切的一切都是對象
- Ruby裏塊(語句塊)的特性很是重要,這個優美的特性貫穿整個Ruby
- Ruby裏模塊和類的概念同樣重要,模塊也是Ruby裏的一個很是優美的特性
- 變量命名慣例
- 局部變量、方法參數、方法的名稱都使用小寫字母開頭
- 有時候變量、方法如下劃線開頭
_name
也是局部的意思,它表示這是私有的東西,不該該暴露給外界
- 全局變量以
$
開頭,例如$var
- 實例變量以
@
開頭,例如@name
- 類變量以
@@
開頭,例如@@class_var
- 類名稱、模塊名稱、常量名稱都以大寫字母開頭
- 方法名稱能夠以
?、!、=
字符結尾,例如equals?
?
字符結尾的方法,表示返回的是一個布爾值,用於測試true/false
!
字符結尾的方法,表示警告提醒,這類方法原處修改(destructive)對象,要當心使用。通常都會提供成對的帶有!
結尾和不帶!
結尾(non-destructive)的方法供選擇。例如uniq()
和uniq!()
,前者修改的是拷貝後的對象,後者在原有對象上修改
=
結尾的方法表示賦值行爲,例若有一個方法名爲test=()
,那麼test=(6)
等價於test = 6
。正如數組元素賦值arr[1] = 3
其實是調用了[]=()
這個方法,它等價於arr[1]=(3)
或arr[1]= 3
。因此,對於面向對象來講,它表現的是setter類方法
- Ruby中的
nil
是一個對象,表示沒有任何東西的對象,而不是沒有對象。nil與nil的比較不管是==
仍是eql?()
都返回true
- 變量/表達式在字符串中的內插方式是使用
#
開頭。在Ruby中,#
前綴能夠看做是一種對某對象的引用、調用之義。例如:
- 內插全局變量
#$var
- 內插實例變量
#@var
- 內插類變量
#@@var
- 可是對於普通的不帶前綴符號的局部變量或表達式,爲了不歧義,一般在
#
後加上{}
。例如#{name}
、#{3+4}
、#{func("hello")}
- Symbols、numbers、true、false是不可變對象,而字符串、數組、hash是可變對象,可使用Object類的
frozen?()
方法判斷類型是否可變。如3.frozen?
、[].frozen?
- 在Ruby中,一元運算符
+= -= *=
等其它相似的操做,和對應的二元運算x = x + y
是徹底等價的,都會建立新的對象x。其它語言中,可能一元操做符是原處修改的,對應的二元運算是非原處修改的,因此可能使用一元運算方式效率會稍高一些

- Ruby中只有nil和false纔是布爾假,其它全部都是布爾真。實際上,nil和false都是nil、false和true分別是NilClass、FalseClass、TrueClass類的實例對象
- 關於註釋:Ruby中可使用
#
符號實現單行註釋和行尾註釋,使用=begin
和=end
實現區塊註釋
- 關於語句終止和續行:
- ruby不強制須要分號終止一個語句,能夠本身識別
- 但分號能夠終止一個語句
- 若是須要續行,能夠在首行尾部加反斜線
\
,也能夠在下一行的非空白首字符加上一個點.
- 操做符在行結尾時能夠直接實現續行提示
puts "hello world" # 不加分號終止語句
puts "hello world"; # 加分號終止語句
puts 3 + # 操做符在行尾,自動續行
2
puts 3 \ # 行尾加反斜線強制續行
+ 2
puts 3
.+ 2 # 行首非空白字符爲點號,自動續到上一行
- 關於函數/方法調用省略括號問題:Ruby沿用了Perl的函數調用行爲,能夠省略括號。但注意:
f(3+2) + 1
:表示將3+2
的結果5做爲f函數的參數,最後將f的運行結果加上1
f (3+2) + 1
:表示將(3+2)+1
的結果6做爲f函數的參數
- 因此,儘可能開啓
ruby -w
選項,它會提示可能引發歧義的地方
- 在函數參數包含了括號的時候,強烈建議函數使用括號包圍整個參數
- Ruby的編碼主要分爲兩種:內部源編碼、外部默認編碼
- 源編碼設置如何讀取ruby腳本中字符,源編碼會影響源代碼文件中的字符串的字面常量編碼,可在源代碼文件頭使用
# coding: utf-8
指定
- 外部默認編碼指定從IO流、外部文件等IO讀取時的讀取編碼,可以使用
-E --encoding
設置外部默認編碼,使用Encoding.default_external
查看外部編碼
- Ruby能夠經過
object_id
方法來查看一個對象的惟一id。若是想查看對象的地址,則(OBJ.object_id << 1).to_s(16)