SlideShare uma empresa Scribd logo
1 de 48
Baixar para ler offline
30分鐘技術分享
         Ruby小觀念&技巧 By Bruce Li




          2012/04/09
          雲端線上科技股份有限公司

12年4月11日星期三
目錄

              • self是誰
              • Symbol跟String的不同
              • Ruby的自省能力
              • ⼀一個小技巧

12年4月11日星期三
目錄

              • self是誰
              • Symbol跟String的不同
              • Ruby的自省能力
              • ⼀一個小技巧

12年4月11日星期三
self是誰


              • 代表當前的object
              • 在最上層時,則為預設(main)


12年4月11日星期三
規則
              程式區塊             範例        self代表
                          (method外)        main
              最上層區塊
                          def m            main
                          class C           C
               class內      def self.m       C
                           def m        C的instance
              singleton   def obj.m        obj
                          module M          M
              module內
                           def m        混入M的物件

12年4月11日星期三
最上層區塊

                 main

                 main




12年4月11日星期三
Class內




12年4月11日星期三
Class內
                                 bje ct)
                  C             o
                           ass也是
                      ( cl




12年4月11日星期三
Class內
                                 bje ct)
                  C             o
                           ass也是
                      ( cl
                  C




12年4月11日星期三
Class內
                                  bje ct)
                   C             o
                            ass也是
                       ( cl
                   C


                 #<C:0x007fbf9284de70>




12年4月11日星期三
singleton method


                    #<Object:0x007fd79b84f448>




12年4月11日星期三
singleton method


                    #<Object:0x007fd79b84f448>




                               =
                               obj



12年4月11日星期三
singleton method


                    #<Object:0x007fd79b84f448>




                               =
                               obj



12年4月11日星期三
module內
                   M




12年4月11日星期三
module內
                                M

                          #<C:0x007fa8fb04e970>

                            stance
                    的 i   n
                C




12年4月11日星期三
應用在宣告class method


                       兩者都可以!
                       因為self此時代表M
                       用self的好處是更名時方便
                     不過被其他區塊蓋到的話可能會讓self變成代表別的物件




              (這段程式的用途...不要問!)
12年4月11日星期三
class也是object
                       內建的




                                      Klass
                                      Class
                                   undefined method `new'



              (Klass這個class,是Class的instance object)
12年4月11日星期三
呼叫method時
                  省略小數點(.)
              • 即是送訊息給self物件




12年4月11日星期三
呼叫method時
                 省略小數點(.)
              • 即是送訊息給self物件
              • 與變數名稱相同時,變數優先



12年4月11日星期三
同名時




12年4月11日星期三
同名時




12年4月11日星期三
呼叫method時
                 省略小數點(.)
              • 即是送訊息給self物件
              • 與變數名稱相同時,變數優先



12年4月11日星期三
呼叫method時
                 省略小數點(.)
              • 即是送訊息給self物件
              • 與變數名稱相同時,變數優先
              • 不過打從⼀一開始就不應該取成同名


12年4月11日星期三
呼叫method時
                 省略小數點(.)
              • 即是送訊息給self物件
              • 與變數名稱相同時,變數優先
              • 不過打從⼀一開始就不應該取成同名
              • 除了⼀一種狀況必須清楚指明self

12年4月11日星期三
呼叫等號結尾的method
               Ruby的syntax sugar




12年4月11日星期三
呼叫等號結尾的method
                  Ruby的syntax sugar




              X
                  nil




12年4月11日星期三
呼叫等號結尾的method
               Ruby的syntax sugar




               nil




12年4月11日星期三
呼叫等號結尾的method
               Ruby的syntax sugar




               nil




12年4月11日星期三
呼叫等號結尾的method
               Ruby的syntax sugar




               nil
               30    √
12年4月11日星期三
目錄

              • self是誰
              • Symbol跟String的不同
              • Ruby的自省能力
              • ⼀一個小技巧

12年4月11日星期三
目錄

              • self是誰
              • Symbol跟String的不同
              • Ruby的自省能力
              • ⼀一個小技巧

12年4月11日星期三
Symbol跟String的不同

              • 內容相同的symbol都代表同⼀一個物件
              • 無法改變symbol的內容
              • symbol效率比string好,很適合拿來當
               hash的index




12年4月11日星期三
代表同⼀一個物件
        1.9.2p290 :001 > "a".equal?("a")
         => false

        1.9.2p290 :002 > :a.equal?(:a)
         => true 




12年4月11日星期三
”equal?”的解說

              • equal? 判斷是否指到同⼀一個object
              • eql? 判斷是否value與type都相同
              • == 判斷value是否相同(因此17==17.0)


12年4月11日星期三
無法改變symbol的內容
        1.9.2p290 :001 > "a" + "b"
         => "ab"

        1.9.2p290 :002 > :a + :b
        NoMethodError: undefined method `+'
        for :a:Symbol




12年4月11日星期三
目錄

              • self是誰
              • Symbol跟String的不同
              • Ruby的自省能力
              • ⼀一個小技巧

12年4月11日星期三
目錄

              • self是誰
              • Symbol跟String的不同
              • Ruby的自省能力
              • ⼀一個小技巧

12年4月11日星期三
Ruby的自省能力


              • 自省:檢查某些事物以確定它是什麼、
               它知道什麼以及它能做什麼。




12年4月11日星期三
• class # "str".class => String
              • is_a? # "str".is_a?(String) => true
              • superclass # String.superclass => Object
              • ancestors
              • methods
              • instance_methods
              • singleton_methods
12年4月11日星期三
• protected_methods
              • private_methods
              • public_methods
              • public_instance_methods
              • protected_instance_methods
              • private_instance_methods
12年4月11日星期三
• respond_to?
              • 應用:
                x = :talk
                if obj.respond_to?(x)
                    obj.__send__(x)
                end




12年4月11日星期三
只顯示在該class定義的
          methods:加上false


                 [:dm, :cm, :nil?, :===, :=~, :!
                 ~, :eql?, :hash, :<=>, :class,
                 :singleton_class, ... (58個)

                             [:dm]

12年4月11日星期三
目錄

              • self是誰
              • Symbol跟String的不同
              • Ruby的自省能力
              • ⼀一個小技巧

12年4月11日星期三
目錄

              • self是誰
              • Symbol跟String的不同
              • Ruby的自省能力
              • ⼀一個小技巧

12年4月11日星期三
each with index




12年4月11日星期三
each with index




  √

12年4月11日星期三
end



12年4月11日星期三
廣告
              雲端線上徵Rails/iOS/Android工程師中

               ‣ inside job board
              我的技術&生活雜事部落格

               ‣ http://littlebmix.blogspot.com/
              學習成功部落格

               ‣ http://ascend-er.blogspot.com/
12年4月11日星期三

Mais conteúdo relacionado

Mais de Bruce Li

Rails Code Club 2 @ Taipei
Rails Code Club 2 @ TaipeiRails Code Club 2 @ Taipei
Rails Code Club 2 @ TaipeiBruce Li
 
010 Better and Better 工程師就業兩年多的心得雜談
010 Better and Better 工程師就業兩年多的心得雜談010 Better and Better 工程師就業兩年多的心得雜談
010 Better and Better 工程師就業兩年多的心得雜談Bruce Li
 
009 增進效率的雜七雜八mac快速鍵與設定 part 2
009 增進效率的雜七雜八mac快速鍵與設定 part 2009 增進效率的雜七雜八mac快速鍵與設定 part 2
009 增進效率的雜七雜八mac快速鍵與設定 part 2Bruce Li
 
008 vim超基礎入門
008 vim超基礎入門008 vim超基礎入門
008 vim超基礎入門Bruce Li
 
007 Facebook Open Graph 相關開發簡單介紹 公開版
007 Facebook Open Graph 相關開發簡單介紹 公開版007 Facebook Open Graph 相關開發簡單介紹 公開版
007 Facebook Open Graph 相關開發簡單介紹 公開版Bruce Li
 
004 動機 單純的力量 讀書心得
004 動機 單純的力量 讀書心得004 動機 單純的力量 讀書心得
004 動機 單純的力量 讀書心得Bruce Li
 
002 增進效率的有的沒的快速鍵與設定
002 增進效率的有的沒的快速鍵與設定002 增進效率的有的沒的快速鍵與設定
002 增進效率的有的沒的快速鍵與設定Bruce Li
 

Mais de Bruce Li (7)

Rails Code Club 2 @ Taipei
Rails Code Club 2 @ TaipeiRails Code Club 2 @ Taipei
Rails Code Club 2 @ Taipei
 
010 Better and Better 工程師就業兩年多的心得雜談
010 Better and Better 工程師就業兩年多的心得雜談010 Better and Better 工程師就業兩年多的心得雜談
010 Better and Better 工程師就業兩年多的心得雜談
 
009 增進效率的雜七雜八mac快速鍵與設定 part 2
009 增進效率的雜七雜八mac快速鍵與設定 part 2009 增進效率的雜七雜八mac快速鍵與設定 part 2
009 增進效率的雜七雜八mac快速鍵與設定 part 2
 
008 vim超基礎入門
008 vim超基礎入門008 vim超基礎入門
008 vim超基礎入門
 
007 Facebook Open Graph 相關開發簡單介紹 公開版
007 Facebook Open Graph 相關開發簡單介紹 公開版007 Facebook Open Graph 相關開發簡單介紹 公開版
007 Facebook Open Graph 相關開發簡單介紹 公開版
 
004 動機 單純的力量 讀書心得
004 動機 單純的力量 讀書心得004 動機 單純的力量 讀書心得
004 動機 單純的力量 讀書心得
 
002 增進效率的有的沒的快速鍵與設定
002 增進效率的有的沒的快速鍵與設定002 增進效率的有的沒的快速鍵與設定
002 增進效率的有的沒的快速鍵與設定
 

001 Ruby小觀念與小技巧

  • 1. 30分鐘技術分享 Ruby小觀念&技巧 By Bruce Li 2012/04/09 雲端線上科技股份有限公司 12年4月11日星期三
  • 2. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧 12年4月11日星期三
  • 3. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧 12年4月11日星期三
  • 4. self是誰 • 代表當前的object • 在最上層時,則為預設(main) 12年4月11日星期三
  • 5. 規則 程式區塊 範例 self代表 (method外) main 最上層區塊 def m main class C C class內 def self.m C def m C的instance singleton def obj.m obj module M M module內 def m 混入M的物件 12年4月11日星期三
  • 6. 最上層區塊 main main 12年4月11日星期三
  • 8. Class內 bje ct) C o ass也是 ( cl 12年4月11日星期三
  • 9. Class內 bje ct) C o ass也是 ( cl C 12年4月11日星期三
  • 10. Class內 bje ct) C o ass也是 ( cl C #<C:0x007fbf9284de70> 12年4月11日星期三
  • 11. singleton method #<Object:0x007fd79b84f448> 12年4月11日星期三
  • 12. singleton method #<Object:0x007fd79b84f448> = obj 12年4月11日星期三
  • 13. singleton method #<Object:0x007fd79b84f448> = obj 12年4月11日星期三
  • 14. module內 M 12年4月11日星期三
  • 15. module內 M #<C:0x007fa8fb04e970> stance 的 i n C 12年4月11日星期三
  • 16. 應用在宣告class method 兩者都可以! 因為self此時代表M 用self的好處是更名時方便 不過被其他區塊蓋到的話可能會讓self變成代表別的物件 (這段程式的用途...不要問!) 12年4月11日星期三
  • 17. class也是object 內建的 Klass Class undefined method `new' (Klass這個class,是Class的instance object) 12年4月11日星期三
  • 18. 呼叫method時 省略小數點(.) • 即是送訊息給self物件 12年4月11日星期三
  • 19. 呼叫method時 省略小數點(.) • 即是送訊息給self物件 • 與變數名稱相同時,變數優先 12年4月11日星期三
  • 22. 呼叫method時 省略小數點(.) • 即是送訊息給self物件 • 與變數名稱相同時,變數優先 12年4月11日星期三
  • 23. 呼叫method時 省略小數點(.) • 即是送訊息給self物件 • 與變數名稱相同時,變數優先 • 不過打從⼀一開始就不應該取成同名 12年4月11日星期三
  • 24. 呼叫method時 省略小數點(.) • 即是送訊息給self物件 • 與變數名稱相同時,變數優先 • 不過打從⼀一開始就不應該取成同名 • 除了⼀一種狀況必須清楚指明self 12年4月11日星期三
  • 25. 呼叫等號結尾的method Ruby的syntax sugar 12年4月11日星期三
  • 26. 呼叫等號結尾的method Ruby的syntax sugar X nil 12年4月11日星期三
  • 27. 呼叫等號結尾的method Ruby的syntax sugar nil 12年4月11日星期三
  • 28. 呼叫等號結尾的method Ruby的syntax sugar nil 12年4月11日星期三
  • 29. 呼叫等號結尾的method Ruby的syntax sugar nil 30 √ 12年4月11日星期三
  • 30. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧 12年4月11日星期三
  • 31. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧 12年4月11日星期三
  • 32. Symbol跟String的不同 • 內容相同的symbol都代表同⼀一個物件 • 無法改變symbol的內容 • symbol效率比string好,很適合拿來當 hash的index 12年4月11日星期三
  • 33. 代表同⼀一個物件 1.9.2p290 :001 > "a".equal?("a")  => false 1.9.2p290 :002 > :a.equal?(:a)  => true  12年4月11日星期三
  • 34. ”equal?”的解說 • equal? 判斷是否指到同⼀一個object • eql? 判斷是否value與type都相同 • == 判斷value是否相同(因此17==17.0) 12年4月11日星期三
  • 35. 無法改變symbol的內容 1.9.2p290 :001 > "a" + "b" => "ab" 1.9.2p290 :002 > :a + :b NoMethodError: undefined method `+' for :a:Symbol 12年4月11日星期三
  • 36. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧 12年4月11日星期三
  • 37. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧 12年4月11日星期三
  • 38. Ruby的自省能力 • 自省:檢查某些事物以確定它是什麼、 它知道什麼以及它能做什麼。 12年4月11日星期三
  • 39. • class # "str".class => String • is_a? # "str".is_a?(String) => true • superclass # String.superclass => Object • ancestors • methods • instance_methods • singleton_methods 12年4月11日星期三
  • 40. • protected_methods • private_methods • public_methods • public_instance_methods • protected_instance_methods • private_instance_methods 12年4月11日星期三
  • 41. • respond_to? • 應用: x = :talk if obj.respond_to?(x) obj.__send__(x) end 12年4月11日星期三
  • 42. 只顯示在該class定義的 methods:加上false [:dm, :cm, :nil?, :===, :=~, :! ~, :eql?, :hash, :<=>, :class, :singleton_class, ... (58個) [:dm] 12年4月11日星期三
  • 43. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧 12年4月11日星期三
  • 44. 目錄 • self是誰 • Symbol跟String的不同 • Ruby的自省能力 • ⼀一個小技巧 12年4月11日星期三
  • 46. each with index √ 12年4月11日星期三
  • 48. 廣告 雲端線上徵Rails/iOS/Android工程師中 ‣ inside job board 我的技術&生活雜事部落格 ‣ http://littlebmix.blogspot.com/ 學習成功部落格 ‣ http://ascend-er.blogspot.com/ 12年4月11日星期三