Ruby語言的一些雜項

  • 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)
相關文章
相關標籤/搜索