Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
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              最上層區塊       ...
最上層區塊                 main                 main12年4月11日星期三
Class內12年4月11日星期三
Class內                                 bje ct)                  C             o                           ass也是           ...
Class內                                 bje ct)                  C             o                           ass也是           ...
Class內                                  bje ct)                   C             o                            ass也是        ...
singleton method                    #<Object:0x007fd79b84f448>12年4月11日星期三
singleton method                    #<Object:0x007fd79b84f448>                               =                            ...
singleton method                    #<Object:0x007fd79b84f448>                               =                            ...
module內                   M12年4月11日星期三
module內                                M                          #<C:0x007fa8fb04e970>                            stance ...
應用在宣告class method                       兩者都可以!                       因為self此時代表M                       用self的好處是更名時方便     ...
class也是object                       內建的                                      Klass                                      Cl...
呼叫method時                  省略小數點(.)              • 即是送訊息給self物件12年4月11日星期三
呼叫method時                 省略小數點(.)              • 即是送訊息給self物件              • 與變數名稱相同時,變數優先12年4月11日星期三
同名時12年4月11日星期三
同名時12年4月11日星期三
呼叫method時                 省略小數點(.)              • 即是送訊息給self物件              • 與變數名稱相同時,變數優先12年4月11日星期三
呼叫method時                 省略小數點(.)              • 即是送訊息給self物件              • 與變數名稱相同時,變數優先              • 不過打從⼀一開始就不應該取成同...
呼叫method時                 省略小數點(.)              • 即是送訊息給self物件              • 與變數名稱相同時,變數優先              • 不過打從⼀一開始就不應該取成同...
呼叫等號結尾的method               Ruby的syntax sugar12年4月11日星期三
呼叫等號結尾的method                  Ruby的syntax sugar              X                  nil12年4月11日星期三
呼叫等號結尾的method               Ruby的syntax sugar               nil12年4月11日星期三
呼叫等號結尾的method               Ruby的syntax sugar               nil12年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好,很適合拿來當  ...
代表同⼀一個物件        1.9.2p290 :001 > "a".equal?("a")         => false        1.9.2p290 :002 > :a.equal?(:a)         => true 12...
”equal?”的解說              • equal? 判斷是否指到同⼀一個object              • eql? 判斷是否value與type都相同              • == 判斷value是否相同(因此1...
無法改變symbol的內容        1.9.2p290 :001 > "a" + "b"         => "ab"        1.9.2p290 :002 > :a + :b        NoMethodError: unde...
目錄              • 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.supe...
• protected_methods              • private_methods              • public_methods              • public_instance_methods   ...
• respond_to?              • 應用:                x = :talk                if obj.respond_to?(x)                    obj.__se...
只顯示在該class定義的          methods:加上false                 [:dm, :cm, :nil?, :===, :=~, :!                 ~, :eql?, :hash, :<...
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
目錄              • self是誰              • Symbol跟String的不同              • Ruby的自省能力              • ⼀一個小技巧12年4月11日星期三
each with index12年4月11日星期三
each with index  √12年4月11日星期三
end12年4月11日星期三
廣告              雲端線上徵Rails/iOS/Android工程師中               ‣ inside job board              我的技術&生活雜事部落格               ‣ http...
Upcoming SlideShare
Loading in …5
×

001 Ruby小觀念與小技巧

1,296 views

Published on

self是誰
symbol與string的不同
淺談Ruby的自省能力
Bonus小技巧:each_with_index

  • Be the first to comment

001 Ruby小觀念與小技巧

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

×